码迷,mamicode.com
首页 > 其他好文 > 详细

PAT (Advanced Level) 1082. Read Number in Chinese (25)

时间:2016-07-02 22:53:09      阅读:239      评论:0      收藏:0      [点我收藏+]

标签:

模拟题。

#include<cstdio>
#include<cstring>
#include<cmath>
#include<vector>
#include<map>
#include<stack>
#include<queue>
#include<string>
#include<iostream>
#include<algorithm>
using namespace std;

string num[15]=
{
    "ling","yi","er","san","si",
    "wu","liu","qi","ba","jiu"
};
string tmp="";
string ans="";
string s="";

string f(string TMP)
{
    if(TMP[0]==0&&TMP[1]==0&&TMP[2]==0&&TMP[3]==0) return "ling";
    string t="";
    int p;
    for(int i=TMP.length()-1;i>=0;i--)
        if(TMP[i]!=0) {p=i; break;}

    for(int i=0;i<=p;i++) t=t+TMP[i];

    if(t==""  ) return "ling";

    if(t.length()==0) return "ling";
    if(t.length()==1) return num[t[0]-0];
    if(t.length()==2)
    {
        if(t[0]==0) return num[t[1]-0]+" Shi";
        return num[t[1]-0]+" shi "+num[t[0]-0];
    }
    if(t.length()==3)
    {
        if(t[0]==0&&t[1]==0) return num[t[2]-0]+" Bai";
        if(t[0]==0&&t[1]!=0) return num[t[2]-0]+" Bai "+num[t[1]-0]+" Shi";
        if(t[0]!=0&&t[1]==0) return num[t[2]-0]+" Bai ling "+num[t[0]-0];
        if(t[0]!=0&&t[1]!=0) return num[t[2]-0]+" Bai "+num[t[1]-0]+" Shi "+num[t[0]-0];
    }
    if(t.length()==4)
    {
        if(t[0]==0&&t[1]==0&&t[2]==0) return num[t[3]-0]+" Qian";
        if(t[0]!=0&&t[1]==0&&t[2]==0) return num[t[3]-0]+" Qian ling "+num[t[0]-0];
        if(t[0]==0&&t[1]!=0&&t[2]==0) return num[t[3]-0]+" Qian ling "+num[t[1]-0]+" Shi";
        if(t[0]!=0&&t[1]!=0&&t[2]==0) return num[t[3]-0]+" Qian ling "+num[t[1]-0]+" Shi "+num[t[0]-0];
        if(t[0]==0&&t[1]==0&&t[2]!=0) return num[t[3]-0]+" Qian "+num[t[2]-0]+" Bai";
        if(t[0]!=0&&t[1]==0&&t[2]!=0) return num[t[3]-0]+" Qian "+num[t[2]-0]+" Bai ling "+num[t[0]-0];
        if(t[0]==0&&t[1]!=0&&t[2]!=0) return num[t[3]-0]+" Qian "+num[t[2]-0]+" Bai "+num[t[1]-0]+" Shi";
        if(t[0]!=0&&t[1]!=0&&t[2]!=0) return num[t[3]-0]+" Qian "+num[t[2]-0]+" Bai "+num[t[1]-0]+" Shi "+num[t[0]-0];
    }
}

int main()
{
    cin>>tmp;
    int len=tmp.length();
    for(int i=0;i<len/2;i++)
        swap(tmp[i],tmp[len-i-1]);

    if(tmp[tmp.length()-1]==-) ans=ans+"Fu ";

    for(int i=0;i<tmp.length();i++)
    {
        if(tmp[i]==-) continue;
        else s=s+tmp[i];
    }

    if(s.length()==9)
    {
        string s1,s2,s3;

        string g="";
        g=g+s[4]+s[5]+s[6]+s[7];
        s2=f(g);

        g="";
        g=g+s[0]+s[1]+s[2]+s[3];
        s3=f(g);

        ans=ans+num[s[s.length()-1]-0]+" Yi";

        if(s2=="ling") {}
        else
        {
            ans=ans+" ";
            if(s[7]==0) ans=ans+"ling ";
            ans=ans+s2;
            ans=ans+" Wan";
        }

        if(s3=="ling"){}
        else
        {
            ans=ans+" ";
            if(s[3]==0) ans=ans+"ling ";
            ans=ans+s3;
        }
    }
    else if(s.length()>=5&&s.length()<=8)
    {
        string s2;
        string s3;

        int len=s.length();
        for(int i=len;i<8;i++) s=s+0;

        string g;
        g=g+s[4]+s[5]+s[6]+s[7];
        s2=f(g);

        g="";
        g=g+s[0]+s[1]+s[2]+s[3];
        s3=f(g);

        ans=ans+s2;
        ans=ans+" Wan";

        if(s3=="ling"){}
        else
        {
            ans=ans+" ";
            if(s[3]==0) ans=ans+"ling ";
            ans=ans+s3;
        }

    }
    else if(s.length()<=4)
    {
        string s3;

        int len=s.length();
        for(int i=len;i<4;i++) s=s+0;

        string g;
        g=g+s[0]+s[1]+s[2]+s[3];
        s3=f(g);

        ans=ans+s3;
    }

    cout<<ans<<endl;

    return 0;
}

 

PAT (Advanced Level) 1082. Read Number in Chinese (25)

标签:

原文地址:http://www.cnblogs.com/zufezzt/p/5636197.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!