7-23 币值转换 (20分)
需要注意的几个点:
-
末尾的0不读
-
中间有多个0时,只读一个0
-
如果数字大于万,万位一定要读
我感觉我的代码存在一点问题,但是竟然AK了(神奇!!!∑(゚Д゚ノ)ノ)
去查了查,网上有的说100000001的大写是一亿万零一!!(就是我的代码结果,也是我觉得有问题的地方)是的,你没看错!不是一亿零一,也不是一亿零零一
但也有的说一亿零一(可能大部分人的习惯都是这个吧,也没有找到具体证据)
看了其它博主的代码,他们的处理是读作一亿零零一 也是AK的。
可能也许并没有设置这个测试点吧
void printR(int s){
int j=0;//标识数字的位数
stack<char> ss;
int x=s%10;
if(s==0){cout<<'a';return;}//如果是0,则输出
if(x!=0){j++;ss.push(x+'a');s=s/10;}//如果最后一位不为0
else {//最后一位为0
while(!x){//直到最后一位不为0
s=s/10;
x=s%10;
j++;
}
}
int flag=1;//标识有没有连续的0,flag为0时表示上一个为0
while(s){
j++;
x=s%10;
if(j==5)ss.push('W');//如果万位的数字为0,但此时依然要输出W
if(x){
if(j==2||j==6) ss.push('S');
else if(j==3||j==7)ss.push('B');
else if(j%4==0)ss.push('Q');
//else if(j==5)ss.push('W');
else if(j==9)ss.push('Y');
flag=1;
ss.push(x+'a');
}
else{
//上一个数也为0,则不需要重复输出0
if(flag!=0){
ss.push('a');
}
flag=0;
}
s=s/10;
}
while(!ss.empty()){
cout<<ss.top();
ss.pop();
}
cout<<endl;
}
如果有问题欢迎各位指正!!!
如果有人知道上面的那个问题,也欢迎评论和指导呀!!