jyyeth


私信TA

用户名:jyyeth

访问量:36374

签 名:

C++学的完吗?

等  级
排  名 174
经  验 6872
参赛次数 0
文章发表 47
年  龄 0
在职情况 学生
学  校 徐州工程学院
专  业

  自我简介:

参考代码:

这道题我用的递归思想,用“亿”和“万”作为分隔符,读完之后利用substr函数截取子字符串继续读取;

总的来说并不难,但这道题细节挺多的,比如多余的零不能重复读取等等,还是需要耐着性子去做,

我也是做了很久,不过AC了还是挺开心的。
#include <iostream>
#include <string>
using namespace std;
const char ans[10][10]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
void read(string a,int rep){
    if(a.size()==10){
        int t=a[1]-'0';
        if(a[0]=='1')cout<<"shi ";
        if(a[0]=='2')cout<<"er shi ";
        if(a[1]!='0')cout<<ans[t];
        cout<<" yi ";
        string s=a.substr(2);
        read(s,rep);
    }
    else if(a.size()==9){
        int t=a[0]-'0';
        cout<<ans[t]<<" yi ";
        string s=a.substr(1);
        read(s,rep);
    }
    else if(5<=a.size()&&a.size()<=8){
        int i,flag=1;
        string s=a.substr(0,a.size()-4);
        read(s,rep);
        for(i=0;i<a.size()-4;i++){
            if(a[i]!='0'){flag=0;break;}
        }
        if(!flag)cout<<"wan ";
        string str=a.substr(a.size()-4);
        read(str,rep);
    }
    else if(a.size()==4){
        int t=a[0]-'0';
        int i;
        string s=a.substr(1);
        for(i=0;i<s.size();i++){
            if(s[i]!='0')break;
        }
        if(i>=s.size()&&!rep)rep=1;
        if(a[0]!='0')cout<<ans[t]<<" qian ";
        if(a[0]=='0'&&!rep){rep=1;cout<<ans[0]<<" ";}
        read(s,rep);
    }
    else if(a.size()==3){
        int t=a[0]-'0';
        int i;
        string s=a.substr(1);
        for(i=0;i<s.size();i++){
            if(s[i]!='0')break;
        }
        if(i>=s.size()&&!rep)rep=1;
        if(a[0]!='0')cout<<ans[t]<<" bai ";
        if(a[0]=='0'&&!rep){rep=1;cout<<ans[0]<<" ";}
        read(s,rep);
    }
    else if(a.size()==2){
        int t=a[0]-'0';
        if(a[0]=='1')cout<<"shi ";
        if(a[0]!='0'&&a[0]!='1')cout<<ans[t]<<" shi ";
        if(a[0]=='0'&&!rep){rep=1;cout<<ans[0]<<" ";}
        string s=a.substr(1);
        read(s,rep);
    }
    else if(a.size()==1){
        int t=a[0]-'0';
        if(a[0]!='0')cout<<ans[t]<<" ";
    }
}
int main()
{
    string a;
    int rep=0;//判断是否有0重复
    cin>>a;
    read(a,rep);
    cout<<endl;
    return 0;
}


 

0.0分

5 人评分

  评论区

做这道题大家肯定都很辛苦,代码还可以,不过还是有bug,比如101010101过不了,这题细节非常多,感觉根本无法做到完美,只求趋近于完美吧
2021-03-27 17:23:57
感觉可以一看
2020-10-06 09:13:07
  • «
  • 1
  • »