首页 > 其他 > 详细

PAT基础级 7-23币值转换(20分)

时间:2020-05-13 22:18:22      阅读:329      评论:0      收藏:0      [点我收藏+]

需要注意的几个点:

  1. 末尾的0不读

  2. 中间有多个0时,只读一个0

  3. 如果数字大于万,万位一定要读

    我感觉我的代码存在一点问题,但是竟然AK了(神奇!!!∑(?Д?ノ)ノ)

    去查了查,网上有的说100000001的大写是一亿万零一!!(就是我的代码结果,也是我觉得有问题的地方)是的,你没看错!不是一亿零一,也不是一亿零零一,就是莫名的中间有个

    但也有的说一亿零一(可能大部分人的习惯都是这个吧,也没有找到具体证据)

    看了其它博主的代码,他们的处理是读作一亿零零一 也是AK的。

    可能也许并没有设置这个测试点吧

 1 void printR(int s){
 2     int j=0;//标识数字的位数
 3     stack<char> ss;
 4     int x=s%10;
 5     if(s==0){cout<<a;return;}//如果是0,则输出
 6     if(x!=0){j++;ss.push(x+a);s=s/10;}//如果最后一位不为0
 7     else {//最后一位为0
 8         while(!x){//直到最后一位不为0
 9             s=s/10;
10             x=s%10;
11             j++;
12          }
13     }
14     int flag=1;//标识有没有连续的0,flag为0时表示上一个为0
15     while(s){
16         j++;
17         x=s%10;
18         if(j==5)ss.push(W);//如果万位的数字为0,但此时依然要输出W
19         if(x){
20             if(j==2||j==6)    ss.push(S);    
21             else if(j==3||j==7)ss.push(B);    
22             else if(j%4==0)ss.push(Q);    
23             //else if(j==5)ss.push(‘W‘);
24             else if(j==9)ss.push(Y);
25             flag=1;
26             ss.push(x+a);
27         }
28         else{
29             //上一个数也为0,则不需要重复输出0
30             if(flag!=0){
31                 ss.push(a);
32             }
33             flag=0;
34         }
35         s=s/10;
36     }
37     while(!ss.empty()){
38         cout<<ss.top();
39         ss.pop();
40     }
41     cout<<endl;
42 }

如果有问题欢迎各位指正!!!

如果有人知道前面那个问题也可以教教我啊!

PAT基础级 7-23币值转换(20分)

原文:https://www.cnblogs.com/liujiuba/p/12885124.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!