7-23 币值转换 (20 分)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_44720323/article/details/101453310

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;
}

猜你喜欢

转载自blog.csdn.net/weixin_44720323/article/details/101453310