PAT基础级 7-23 币值转换

7-23 币值转换 (20分)

需要注意的几个点:

  1. 末尾的0不读

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

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

    我感觉我的代码存在一点问题,但是竟然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;
}

如果有问题欢迎各位指正!!!
如果有人知道上面的那个问题,也欢迎评论和指导呀!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值