币值转换

题目:输入一个整数(位数不超过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 }

 

posted @ 2019-02-21 17:35  harsonyoung  阅读(153)  评论(0)    收藏  举报