• 该算法未经过大量数据验证!!!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include <iostream>
#include <string>
using namespace std;

string chinese[] = {"零", "一", "二", "三", "四", "五", "六", "七", "八", "九"};
string bit[] = {"", "十", "百", "千"};

string GetChinese(string num)
{
if (stoi(num) == 0) return "";

string result;
for (int i = 0; i < num.size(); i++)
{
if (num[i] == '0' && i != num.size() - 1 && num[i + 1] != '0')
{
result += "零";
}
else if (num[i] != '0')
{
result += chinese[num[i] - '0'] + bit[num.size() - i - 1];
}
}
return result;
}

string NumToChinese(string str)
{
if (str.size() <= 4)
{
string gc = GetChinese(str);
if (gc == "") return "零";
return gc;
}
string result;
string thousand = str.substr(str.size() - 4, 4);
result = GetChinese(thousand);
if (str.size() <= 8)
{
string tt = str.substr(0, str.size() - 4);
string gc = GetChinese(tt);
if (gc != "") result = gc + "万" + result;
return result;
}
else if (str.size() > 8)
{
string tt = str.substr(str.size() - 8, 4);
string gc = GetChinese(tt);
if (gc != "") result = gc + "万" + result;
return NumToChinese(str.substr(0, str.size() - 8)) + "亿" + result;
}
return result;
}

int main()
{
long long num;
cin >> num;
string result = NumToChinese(to_string(num));
cout << result;
}