A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 13717407086 中级黑马   /  2016-5-13 21:54  /  1016 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

//-21. 金额转换,阿拉伯数字转换成中国传统形式。例如:1 0 1 0 0 0 0 0 1 0 1 0   转换为   壹仟零壹拾亿零壹仟零壹拾圆整  ok

#include <stdio.h>
#include <string.h>

int main(int argc, const char * argv[]) {
    //接受输入的数字
    char arr[200];
    printf("请输入你的身价\n");
    scanf("%s",arr);
    for (int i = 0; i < strlen(arr); i++) {
        switch (arr) {
            case '0':
                printf("零");
                break;
            case '1':
                printf("壹");
                break;
            case '2':
                printf("贰");
                break;
            case '3':
                printf("叁");
                break;
            case '4':
                printf("肆");
                break;
            case '5':
                printf("伍");
                break;
            case '6':
                printf("陆");
                break;
            case '7':
                printf("柒");
                break;
            case '8':
                printf("捌");
                break;
            case '9':
                printf("玖");
                break;
            default:
                break;
        }
        
    }
   
   
    //
    return 0;
}
请问这个数字转换的题目  我要怎样才能把后面的单位添加进去啊!而且题目没给上限,如果考试考到一般写到哪个单位就可以了啊

2 个回复

倒序浏览
本题重点是把这个数多少位求出来并一位一位的拆开,另int 型最大值为 2^ 32,最多是10位数的整数. 代码如下:
#include<stdio.h>
#include<math.h>

void zhongWen(int a);
void danWei(int a);
int getLen(int num);

int main()
{
   
    int num = 0;
   
    printf("请输入一个整数:");
    scanf("%d",&num);
   
    //复制这个数
    int num1 = num;
    //求出有多少位
    int wei = getLen(num1);
   
    //建一个数组包含把数字单个拆分后存起来并输出
    int len = wei;
    int shuShu[len];
   
    for(int i = 0; i < wei; i++)
    {
        int j = pow(10,wei - 1 - i);
        shuShu = num1 / j;
        num1 = num1 % j;
        zhongWen(shuShu);
        danWei(len - 1 - i);

    }
   
    printf("\n");
   
}

int getLen(int num)
{
    int rest = num;
    int i = 0;
    int mod = (int)pow(10,0);
    do
    {
        mod = (int)pow(10,i);
        i++;
    }while (rest / mod != 0);
   
    return i-1;
}

void zhongWen(int a)
{
    switch (a)
    {
        case 0:
            printf("零");
            break;
        case 1:
            printf("壹");
            break;
        case 2:
            printf("贰");
            break;
        case 3:
            printf("叁");
            break;
        case 4:
            printf("肆");
            break;
        case 5:
            printf("伍");
            break;
        case 6:
            printf("陆");
            break;
        case 7:
            printf("柒");
            break;
        case 8:
            printf("捌");
            break;
        case 9:
            printf("玖");
            break;
        default:
            break;
    }
}

void danWei(int a)
{
    switch (a)
    {
        case 0:
            printf("元");
            break;
        case 1:
            printf("拾");
            break;
        case 2:
            printf("百");
            break;
        case 3:
            printf("千");
            break;
        case 4:
            printf("万");
            break;
        case 5:
            printf("拾");
            break;
        case 6:
            printf("百");
            break;
        case 7:
            printf("千");
            break;
        case 8:
            printf("亿");
            break;
        case 9:
            printf("拾");
            break;
        default:
            break;
    }
}
回复 使用道具 举报
buzheng 发表于 2016-5-14 19:16
本题重点是把这个数多少位求出来并一位一位的拆开,另int 型最大值为 2^ 32,最多是10位数的整数. 代码如下:
...

为什么要把这个输入的数复制一下?是为了防止后续需要使用这个原始值
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马