PAT A 1082. Read Number in Chinese (25)

题目

Given an integer with no more than 9 digits, you are supposed to read it in the traditional Chinese way.  Output "Fu" first if it is negative.  For example, -123456789 is read as "Fu yi Yi er Qian san Bai si Shi wu Wan liu Qian qi Bai ba Shi jiu".  Note: zero ("ling") must be handled correctly according to the Chinese tradition.  For example, 100800 is "yi Shi Wan ling ba Bai".

Input Specification:

Each input file contains one test case, which gives an integer with no more than 9 digits.

Output Specification:

For each test case, print in a line the Chinese way of reading the number.  The characters are separated by a space and there must be no extra space at the end of the line.

Sample Input 1:

-123456789

Sample Output 1:

Fu yi Yi er Qian san Bai si Shi wu Wan liu Qian qi Bai ba Shi jiu

Sample Input 2:

100800

Sample Output 2:

yi Shi Wan ling ba Bai

 

把数字表达成中文发音。规则:

1、每4位后要补相应的亿、万;

2、每4位中的千、百、十如果数字不为0,则要补相应位的发音;

3、每4位中每当0出现在非0数字前时,需要补零的发音;

注意本身为0的特殊情况

 

代码:

#include <iostream>
#include <string>
using namespace std;

int main()
{
	string num[10]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
	string wei[5]={"Shi","Bai","Qian","Wan","Yi"};
	
	string data;	//输入数据
	cin>>data;
	int begin=0,end=data.size(),next;	//起始位置,超尾,下一个4位数据的头
	int flag=0;	//是否中间出现0的标志
	if(data[0]=='-')
		begin=1;
	if(end-begin<=1&&data[begin]=='0')	//处理0的特殊情况
	{
		cout<<"ling";
		return 0;
	}
	if(data[0]=='-')	//处理负号
		cout<<"Fu";
	while(begin<end)
	{
		next=end;
		while(next-4>begin)	//取4位
			next-=4;
		while(begin<next)	//输出
		{
			if(data[begin]-'0'>0)
			{
				if(flag==1)	//补零
				{
					cout<<" ling";
					flag=0;
				}
				if(begin>0)	//非零输出
					cout<<" ";
				cout<<num[data[begin]-'0'];
				if(next-begin-2>=0)	//输出个十百位
					cout<<" "<<wei[next-begin-2];
			}
			else
				flag=1;
			begin++;
		}
		if(end-next>0)	//输出万亿
			cout<<" "<<wei[(end-next)/4+2];
	}
	return 0;
}


 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值