1082 Read Number in Chinese (25 分)
Given an integer with no more than 9 digits, you are supposed to read it in the traditional Chinese way. Output Fu
first if it is negative. For example, -123456789 is read as Fu yi Yi er Qian san Bai si Shi wu Wan liu Qian qi Bai ba Shi jiu
. Note: zero (ling
) must be handled correctly according to the Chinese tradition. For example, 100800 is yi Shi Wan ling ba Bai
.
Input Specification:
Each input file contains one test case, which gives an integer with no more than 9 digits.
Output Specification:
For each test case, print in a line the Chinese way of reading the number. The characters are separated by a space and there must be no extra space at the end of the line.
Sample Input 1:
-123456789
Sample Output 1:
Fu yi Yi er Qian san Bai si Shi wu Wan liu Qian qi Bai ba Shi jiu
Sample Input 2:
100800
Sample Output 2:
yi Shi Wan ling ba Bai
我第一次写的时候,只得了16分,有两个测试点没过(说是格式错误),后来,又有其他事,就一直耽误了,今天又看了看。
PS:我的代码虽然过了,但是我自己发现了bug ,如:输入0000000 输出 Wan ,如果有哪位大神,有很简短的代码,请评论区留链接。
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int main()
{
string a[10]={"","yi","er","san","si","wu","liu","qi","ba","jiu"};
string b[4]={"","Shi","Bai","Qian"};
string c;
int i,j,q=0,len,s_l,f,flag=0;
cin>>c;
len=c.length();
if(c[0]=='-')
{
q=1;
f=0;
s_l=len-1;
cout<<"Fu";
}
else
{
q=0;
f=1;
s_l=len;
}
if(len==1&&c[q]=='0')
{
cout<<"ling"<<endl;
return 0;
}
for(;q<len;q++)
{
if(c[q]-'0'!=0)
{
if(c[0]!='-'&&!flag)
{
flag=1;
}
else
if(c[0]=='-'&&!flag)
{
cout<<" ";
flag=1;
}
else
if(flag)
cout<<" ";
cout<<a[c[q]-'0'];
if((s_l-q-f)%4!=0)
{
cout<<" ";
cout<<b[(s_l-q-f)%4];
}
}
if((s_l-q-f)%4==0)
{
if((s_l-q-f)/4==2)
{
cout<<" Yi";
}
if((s_l-q-f)/4==1)
{
cout<<" Wan";
}
}
if(c[q]-'0'==0&&c[q+1]-'0'!=0&&q+1<len)
{
cout<<" ling";
}
}
cout<<endl;
return 0;
}
别人的代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
char num[10][5] = {
"ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"
};
char wei[5][5] = {"Shi", "Bai", "Qian", "Wan", "Yi"};
int main() {
char str[15];
scanf("%s", str);
int len = strlen(str);
int left = 0, right = len - 1;
if(str[0] == '-') {
printf("Fu");
left++;
}
while(left + 4 <= right) {
right -= 4;
}
while(left < len) {
bool flag = false;
bool isPrint = false;
while(left <= right) {
if(left > 0 && str[left] == '0') {
flag = true;
} else {
if(flag) {
printf(" ling");
flag = false;
}
if(left > 0) {
printf(" ");
}
printf("%s", num[str[left] - '0']);
isPrint = true;
if(left != right) {
printf(" %s", wei[right - left - 1]);
}
}
left++;
}
if(isPrint && right != len - 1) {
printf(" %s", wei[(len - 1 - right) / 4 + 2]);
}
right += 4;
}
return 0;
}