版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
7-23 币值转换 (20 分)
做题感悟:如果只是简单的由数字转化为带万,千,百,十的,其实并不难。
他的难点就在于‘ 零 ’ 的使用要符合我们的日常用法。
就比如1001,读出来就是一千零一,而不是一千一。
在做题的时候发现题目的验证有一点的缺陷:就是我的代码在输入时1001的时候,输出的是一千一,却满分通过了,不过最后我修改了代码使它可以正确输出1001。
#include <stdio.h>
#include <stdlib.h>
char *Print_Fourdigit(int num);
int main()
{
char *S;
int num;
char digit[10] = {'a','b','c','d','e','f','g','h','i','j'};
scanf("%d",&num);
//处理亿以上的部分
if(num/1000000000 != 0) printf("%c%c",digit[num/1000000000],'S');
if(num/100000000%10 != 0) printf("%c%c",digit[num/100000000%10],'Y');
//处理万的部分
if(num/10000%10000 != 0){
S = Print_Fourdigit(num/10000%10000);
printf("%s",S);
}
//打印W
if(num/10000%10000 != 0 && num/10000 != 0) printf("%c",'W');
//判断W之后用不用加零
if(num/10000%10 == 0 && num/10000 != 0) printf("a");
//处理千及之后的
if(num%10000 != 0){
S = Print_Fourdigit(num%10000);
printf("%s\n",S);
}
//处理num == 0的时候
if(num == 0) printf("a");
return 0;
}
char *Print_Fourdigit(int num){
if(num == 0) return NULL;
char digit[10] = {'a','b','c','d','e','f','g','h','i','j'};
char *result;
result = (char*)malloc(sizeof(char));
int i=0;
//处理千位
if(num/1000 != 0) {result[i++] = digit[num/1000];result[i++] = 'Q';}
//处理百位
if(num/100%10 != 0) {result[i++] = digit[num/100%10];result[i++] = 'B';}
else if(num/1000 != 0 && num/10%10 != 0) result[i++] = 'a';
//处理十位
if(num/10%10 != 0) {result[i++] = digit[num/10%10];result[i++] = 'S';}
else if(num/100%10 != 0 && num%10 != 0) result[i++] = 'a';
//处理个位
if(num/1000 != 0 && num/1000 == 0 && num/10%10 == 0 && num%10 != 0){
result[i++] = 'a';
result[i++] = digit[num%10];
} //用来处理1001的情况
else if(num%10 != 0) result[i++] = digit[num%10];
result[i] = '\0';
return result;
}