需要注意的几个点:
末尾的0不读
中间有多个0时,只读一个0
如果数字大于万,万位一定要读
我感觉我的代码存在一点问题,但是竟然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 }
如果有问题欢迎各位指正!!!
如果有人知道前面那个问题也可以教教我啊!
原文:https://www.cnblogs.com/liujiuba/p/12885124.html