1082 Read Number in Chinese (25 分)

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

#include<bits/stdc++.h>
using namespace std;

string number[10] = {"ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"};
int main() {
	string num;
	int flag1 = 0, flag2 = 0; 
	cin >> num;
	if (num[0] == '-') {
		printf("Fu ");
		num.erase(num.begin());
	}
	if (num.size() == 1) {
		printf("%s", number[num[0] - '0'].c_str());
		return 0;
	}
	int i = 0, len = num.size() - 1;
	stack<string> s;
	while (i < num.size()) {
		if (i >= 4 && !flag1) {
			flag1 = 1;
			s.push("Wan");
		}
		if (i == 8) s.push("Yi");
		switch(i % 4) {
			case 0 : {
				if (num[len - i] != '0') {
					s.push(number[num[len - i] - '0']);
					flag2 = 1;
				} else flag2 = 0;
				break;
			}
			case 1 : {
				if (num[len - i] != '0') {
					s.push("Shi");
					s.push(number[num[len - i] - '0']);
					flag2 = 1;
				} else if (flag2) {
					 s.push("ling");
					 flag2 = 0;
				}
				break;
			}
			case 2 : {
				if (num[len - i] != '0') {
					s.push("Bai");
					s.push(number[num[len - i] - '0']);
					flag2 = 1;
				} else if (flag2) {
					 s.push("ling");
					 flag2 = 0;
				}
				break;
			}
				
			case 3 : {
				if (num[len - i] != '0') {
					s.push("Qian");
					s.push(number[num[len - i] - '0']);
					flag2 = 1;
				} else if (flag2){
					 s.push("ling");
					 flag2 = 0;
				}
				break;
			}
		}
		i++;
	}
	flag1 = 0;
	while(!s.empty()) {
		if (flag1) printf(" ");
		else {
			flag1 = 1;
		}
		printf("%s", s.top().c_str());
		s.pop();
	}
	return 0;
} 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值