1082 Read Number in Chinese (25分)

在这里插入图片描述
在这里插入图片描述
特别注意零的处理:

#include<string>
#include<iostream>
using namespace std;
string titles[] = { "Yi", "Qian", "Bai", "Shi", "Wan", "Qian", "Bai", "Shi", ""};
string num[] = { "ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu" };
string s;
int getTitlePos(int pos) {
	return 9 - s.length() + pos;
}
int main() {
	cin >> s;
	int i = 0;
	if (s[0] == '-') {
		printf("Fu");
		i++;
	}
	while (i < s.length()) {
		string title = titles[getTitlePos(i)];
		char digit = s[i];
		string digitName = num[digit - '0'];
		if (digit != '0') {
			if (i != 0)
				printf(" ");
			cout << digitName;
			if (title != "")	//""用来凑数避免越界判断
				cout << " " << title;
		}
		else {
			int flag = 0;
			if (s.length() == 1) {	//输入只有一个零
				flag = 1;
			}
			else if (i > 0 && s[i - 1] == '0' && titles[getTitlePos(i - 1)] != "Wan")	//以万为分界,防止重复输出0:如500,001应该输出五十万零一而不是"五十万零零一"或"五十万一"
				flag = 0;
			else if (getTitlePos(i) <= 4) {
				for (int j = i + 1;getTitlePos(j) <= 4;j++) {
					if (s[j] != '0')
						flag = 1;
				}
			}
			else {
				for (int j = i;j < s.length();j++) {
					if (s[j] != '0')
						flag = 1;
				}
			}
			if (flag == 1) {
				if (s[0] == '-' && i > 1 || s[0] != '-' && i > 0)
					cout << " ";
				cout << digitName;
			}
			else if (title == "Wan")
				cout << " " << title;
		}
		i++;
	}
}
发布了61 篇原创文章 · 获赞 0 · 访问量 803

猜你喜欢

转载自blog.csdn.net/weixin_43116322/article/details/104027783