原题:1082. Read Number in Chinese (25)
解题思路:
主要理清楚规律,每位应该输出什么数字,模拟一遍就好了。
代码如下:
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
char tab1[11][10] = {"ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"};
char tab2[9][10] = {"", "Shi", "Bai", "Qian", "Wan", "Shi", "Bai", "Qian", "Yi"};
int main()
{
int n;
while(scanf("%d", &n) == 1)
{
if(n == 0) {printf("ling\n"); continue;} //特殊处理0
if(n < 0) {printf("Fu "); n=-n;}
int a = 1, i = 0, pre = 1, first = 1;
while(n / a >= 10) {a *= 10;i++;} //求位数
for(;i >= 0; i--)
{
int x = n/a;
x = x % 10; //求当前位上的数
if(x > 0)
{
if(pre == 0)
printf(" %s", tab1[0]);
pre = 1;
if(first) {printf("%s", tab1[x]), first = 0;} //输出当前位上的数字
else printf(" %s", tab1[x]);
if(i) printf(" %s", tab2[i]); //输出权值
}
else
{
pre = 0;
if(i % 4 == 0 && i) printf(" %s", tab2[i]);//万和亿为0要特殊处理
}
a /= 10;
}
printf("\n");
}
return 0;
}