原题链接:蓝桥杯基础练习VIP-数的读法
参考代码:
这道题我用的递归思想,用“亿”和“万”作为分隔符,读完之后利用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分
2 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复