币值转换
题目:输入一个整数(位数不超过9位)代表一个人民币值(单位为元),请转换成财务要求的大写中文格式。如23108元,转换后变成“贰万叁仟壹百零捌”元。为了简化输出,用小写英文字母a-j顺序代表大写数字0-9,用S、B、Q、W、Y分别代表拾、百、仟、万、亿。于是23108元应被转换输出为“cWdQbBai”元。
设计思路
这题算是非常能体现出人和机器思考方式差别了。这道题的关键在于对于零的处理,我选择使用一个标记变量和两个预测变量来处理出现多个零的情况。而对于一般情况,则可以从高位按位逐位转换输出即可。
PS:原始版本是用Python写的只有40行,C写出来都130+行了,可见Python编写效率之高,各位大佬赶紧看看Python吧!
本题调试过程碰到问题及解决办法
刚做完时,发觉自己这种 if 堆砌的方法就像是一个语文老师写出来的(雾)。遂上百度寻其他解决思路,发现有几位博主说在一亿零一这个数字容易输出一亿零零一。赶紧跑了跑我的程序,果然,在一亿零一这个中间零位过多的情况下会输出错误,想了好久也没有想到一个合适的算法,只好用一个简单粗暴的 if 直接输出正确答案,若有想到合适处理零的算法的大触,请直接在本文下留言。
运行结果

实验代码
1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 5 int main(void) 6 { 7 int q=0,p=0,w=0,count=0,counts=0; 8 char snum[10]={0},s[10]={0},n[10]={0}; 9 int zero = 0; 10 scanf("%s",snum); 11 12 13 q=atoi(snum); 14 p=w=1; 15 16 17 if(strlen(snum)<=9) 18 { 19 count=counts=strlen(snum); 20 21 while(q%10==0 && q>0) 22 { 23 q=q/10; 24 } 25 26 itoa(q,s,10); 27 //strcpy(s, l); 28 29 int le= strlen(s); 30 for(int i=0;i<le;i++) 31 { 32 if(i<strlen(s)-1) 33 { 34 char k[5]; 35 char h[5]; 36 37 k[0]=s[i]; 38 h[0]=s[i+1]; 39 40 w=atoi(k); 41 p=atoi(h); 42 } 43 44 if(w==0&&p==0&&count!=5) 45 { 46 zero=1; 47 } 48 49 else if(w==0&&p!=0&&zero==0&&i<str(s)-1) 50 { 51 char z[5]="a"; 52 strcat(n,z); 53 } 54 55 else if(count==5 && i==0) 56 { 57 char z[5]="W"; 58 strcat(n, z); 59 } 60 61 else if(count==9 && zero==0) 62 { 63 char z[5]="Y"; 64 char x[5]=""; 65 x[0]=s[i]+49; 66 strcat(x,z); 67 strcat(n,x); 68 } 69 70 else if(count==5 && zero==0) 71 { 72 char z[5]="W"; 73 char x[5]=""; 74 x[0]=s[i]+49; 75 strcat(x,z); 76 strcat(n,x); 77 } 78 79 else if((count==4||count==8) && zero==0) 80 { 81 char z[5]="Q"; 82 char x[5]=""; 83 x[0]=s[i]+49; 84 strcat(x,z); 85 strcat(n,x); 86 } 87 88 else if((count==3||count==7) && zero==0) 89 { 90 char z[5]="B"; 91 char x[5]=""; 92 x[0]=s[i]+49; 93 strcat(x,z); 94 strcat(n,x); 95 } 96 97 else if((count==2||count==6) && zero==0) 98 { 99 char z[5]="S"; 100 char x[5]=""; 101 x[0]=s[i]+49; 102 strcat(x,z); 103 strcat(n,x); 104 } 105 106 else if(zero==1) 107 { 108 char z[5]="a"; 109 strcat(n,z); 110 p=w=1; 111 zero=0; 112 } 113 114 else 115 { 116 char x[5]=""; 117 x[0]=s[i]+49; 118 strcat(n,x); 119 } 120 121 count=count-1; 122 } 123 124 if(counts>8 && s[3]-48==0 && s[2]-48==0 && s[1]-48==0) 125 { 126 printf("bYab"); 127 } 128 else 129 { 130 printf("%s",n); 131 } 132 133 } 134 135 136 return 0; 137 }

浙公网安备 33010602011771号