题目:https://www.nowcoder.com/pat/1/problem/4312
题意:
给出一串最大九个数字的整数,用汉语读法输出
分析:
解决这个题目并没有难度,难度在于找到合适的测试用例,进行代码的自我测试
万、亿、零、千、百、十,如何读零,取万取亿
样例
输入例子:
-123456789
输出例子:
Fu yi Yi er Qian san Bai si Shi wu Wan liu Qian qi Bai ba Shi jiu
代码:
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int main()
{
string str;
cin >> str;
int n = 0;
int zero = 0;
int t = 0;
stack<string> s;while(!s.empty()) s.pop();
string name[10] = {"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
for(string::iterator it = str.end()-1;it!=str.begin()-1;it--)
{
n++;
if(str.end()-1==str.begin())
{
s.push(name[*it - '0']);
break;
}
if(*it=='-')
{
if(zero)
{
s.push(name[0]);
s.push(" ");
s.push("Fu");
}
else{
s.push(" ");
s.push("Fu");
}
}
else if(*it=='0')
{
zero++;
continue;
}
else
{
if(t!=0) s.push(" ");
t++;
if(n==9)
{
if(n-1!=zero&&zero>0)
{
s.push(name[0]);
s.push(" ");
}
s.push("Yi");
s.push(" ");
}
else if(4<n&&n<9)
{
if(n-zero==5||n-zero==1)
{
s.push("Wan");
s.push(" ");
}
else if(n-zero<5&&n-1!=zero)
{
s.push(name[0]);
s.push(" ");
s.push("Wan");
s.push(" ");
}
}
if(n-4==4||n==4)
{
if(zero>0&&((n>4&&(n-zero>5))||(n<=4&&(n-zero>1))))
{
s.push(name[0]);
s.push(" ");
}
s.push("Qian");
s.push(" ");
}
else if(n-4==3||n==3)
{
if(zero>0&&((n>4&&(n-zero>5))||(n<=4&&(n-zero>1))))
{
s.push(name[0]);
s.push(" ");
}
s.push("Bai");
s.push(" ");
}
else if(n-4==2||n==2)
{
if(zero>0&&((n>4&&(n-zero>5))||(n<=4&&(n-zero>1))))
{
s.push(name[0]);
s.push(" ");
}
s.push("Shi");
s.push(" ");
}
s.push(name[*it - '0']);
zero=0;
}
}
while(!s.empty()) {
cout << s.top();
s.pop();
}
cout << endl;
return 0;
}