Read Number in Chinese (25)

来源:互联网 发布:c语言 设备端接入 编辑:程序博客网 时间:2024/06/09 11:53

题目描述

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".

输入描述:

Each input file contains one test case, which gives an integer with no more than 9 digits.


输出描述:

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.

输入例子:

-123456789

输出例子:

Fu yi Yi er Qian san Bai si Shi wu Wan liu Qian qi Bai ba Shi jiu

这道题看似简单,实则非常困难,需要填的坑特别多。


我的代码:

(注:在牛客网上十九个测试点都通过了。但是在PAT甲级真题网上还有一个测试点尚未通过)

#include<iostream>#include<vector>#include<string>#include<algorithm>using namespace std;vector<char>v;vector<char>::iterator it,ot;char a[20];int i,j=0,k=0,flag=0,n;string b[20],c[9]={"yi","er","san","si","wu","liu","qi","ba","jiu"};int main(){    gets(a);    n=atoi(a);    for(i=0;a[i];i++) v.push_back(a[i]);    reverse(v.begin(),v.end());    for(it=v.begin();it!=v.end();it++)    {        j++;        if(*it=='0')        {            if(n==0) b[k++]="ling";            else if(flag==0) continue;            else if(j==5)            {                for(ot=it;ot!=v.end();ot++)                {                    j++;                    if(*ot!='0') break;                }                if(j<=9)                {                    flag=0;                    b[k++]="Wan";                }                j=5;            }            else            {                flag=0;                b[k++]="ling";            }        }        else if(*it=='-') b[k++]="Fu";        else        {            flag=1;            if(j==2 || j==6) b[k++]="Shi";            else if(j==3 || j==7) b[k++]="Bai";            else if(j==4 || j==8) b[k++]="Qian";            else if(j==5) b[k++]="Wan";            else if(j==9) b[k++]="Yi";            b[k++]=c[*it-'0'-1];        }    }    while(k-- && k>=1) cout<<b[k]<<" ";    cout<<b[0]<<endl;    return 0;}

原创粉丝点击