PAT——1082 Read Number in Chinese 甲级

1082 Read Number in Chinese

题目

https://pintia.cn/problem-sets/994805342720868352/problems/994805385053978624

注意

102345读作10万零两千三百四十五,
100002345读作一亿零两千三百四十五
所以下面这行代码,我把原来的j!=0删掉了

if(!zero&&j!=0&&n/J[curpos]>=10) zero=true;

当然,这个地方其实是有争议的,但删不删都能通过,说明出题人为了避免歧义就没有设置相关的测试点

AC代码

#include<bits/stdc++.h>
using namespace std;
string num[10] = { "ling","yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu" };
string c[6]={"Ge","Shi","Bai","Qian","Yi","Wan"};
int J[]={1,10,100,1000,10000,100000,1000000,10000000,100000000};
int main()
{
	int n;
	cin>>n;
	if(n==0)
	{
		cout<<"ling";
		return 0;
	}
	if(n<0)
	{
		cout<<"Fu ";
		n=-n;
	}
	int part[3];
	part[0]=n/100000000;
	part[1]=(n/10000)%10000;
	part[2]=n%10000;
	int zero=false,flag=0;
	for(int i=0;i<3;i++)
	{
		int tmp=part[i];
		for(int j=3;j>=0;j--)
		{
			int curpos=8-4*i+j;
			if(curpos>=9) continue;
			int cur=(tmp/J[j])%10;
			if(cur)
			{
				if(zero)
				{
					flag++==0? cout<<"ling" : cout<<" ling";
					zero=false;
				}
				if(j==0)
					flag++==0? cout<<num[cur] : cout<<" "<<num[cur];
				else 
					flag++==0? cout<<num[cur]<<" "<<c[j] : cout<<" "<<num[cur]<<" "<<c[j];
			}
			else
				if(!zero&&j!=0&&n/J[curpos]>=10) zero=true;
		}
		if(i!=2&&part[i]!=0) cout<<" "<<c[i+4];
	}
}

参考

1082. Read Number in Chinese (25)-PAT甲级真题

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值