特别注意零的处理:
#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++;
}
}