寒假作业2编辑总结

7-1 币值转换 (20 分)

输入一个整数(位数不超过9位)代表一个人民币值(单位为元),请转换成财务要求的大写中文格式。如23108元,转换后变成“贰万叁仟壹百零捌”元。为了简化输出,用小写英文字母a-j顺序代表大写数字0-9,用S、B、Q、W、Y分别代表拾、百、仟、万、亿。于是23108元应被转换输出为“cWdQbBai”元。

输入格式:

输入在一行中给出一个不超过9位的非负整数。

输出格式:

在一行中输出转换后的结果。注意“零”的用法必须符合中文习惯。

输入样例1:

813227345

输出样例1:

iYbQdBcScWhQdBeSf

输入样例2:

6900

输出样例2:

gQjB
 1 #include<stdio.h>
 2 int main()
 3 {
 4     int i,n,m=1,p=1,z=0,item;
 5     char a[10] = {'a','b','c','d','e','f','g','h','i','j'}; /*定义两个数组储存字母*/
 6     char b[8] = {'S','B','Q','W','S','B','Q','Y'};
 7     scanf("%d",&n);
 8     item=n;
 9     while(item/10>0){  /*这里是为了判断N是几位数*/
10         item=item/10;
11         m++;
12         p=p*10;
13     }
14     if(m==1||n==0){  /*如果是1位数则直接输出并结束程序*/
15         printf("%c",a[n]);
16         return 0;
17     }
18     if(n%10==0){  /*判断N是不是以0结尾的,如6900*/
19         while(n%10==0){  /*去掉后面的0*/
20             n=n/10;
21             p=p/10;
22             z++;
23         }
24         for(i=(m-z);i>0;i--){  /*(m-z)是减少循环输出的次数,后面有几个0就减少几次*/
25             printf("%c",a[n/p]);  /*通过取整,输出N最前面的那一位数字*/
26             if(m-2>=0&&n/p!=0)  /*(m-2)是判断还符不符合继续输出位数,(n/p!=0)是为了防止N中间有0的情况*/
27                 printf("%c",b[m-2]);  /*这里为什么是(m-2)和我定义的b数组有关*/
28             m--;        
29             if(n/p==0){  /*整个if语句都是去掉N中间的0*/
30                 p=p/10;
31                 while(n/p==0){
32                     p=p/10;
33                     m--;i--;
34             }
35                 continue;
36             }
37             n=n%p;  /*取整准备下一次的循环*/
38             p=p/10;
39             if(i==4&&n/p==0)  /*这里如果N是大于10万的数就必须当i等于4的时候多输出一个W*/
40                 printf("%c",b[3]);
41         }
42     }
43     else{  /*后面这里就和上面的差不多,因为不是0结尾的就改了一些数据的行了*/
44         for(i=m;i>0;i--){
45             printf("%c",a[n/p]);
46             if(i-2>=0&&n/p!=0)
47                 printf("%c",b[i-2]);
48             if(n/p==0){
49                 p=p/10;
50                 while(n/p==0){
51                     p=p/10;
52                     i--;
53                 }
54                 continue;
55             }
56             n=n%p;
57             p=p/10;
58             if(i==6&&n/p==0)
59                 printf("%c",b[3]);
60     }
61 }
62     return 0;
63  }
设计思路

作业过程中遇到的问题与解决办法


最小个位数运行超时的问题,我是把当N为个位数时,单独拿出来了,如14-17行,中间连续多0的问题,我通过调试发现是在循环去0的过程中,一个重要的计数变量m没有随之减小,所以我在33行加了一个m--。
运行结果截图

posted @ 2019-02-13 16:31  白短袖真的是百搭啊  阅读(193)  评论(1编辑  收藏  举报