解题思路:
首先需要明白读数存在映射关系,最简单的映射关系就是数组
其次,数字的位数不多应该可以不用数组转化字符串就可以解出来,我试了一下,放弃了,觉得还是将数字转化为字符串要好,因为我们计数一般是4位记录,读数的时候不就是加上那个,亿,万,就行
注意事项:
注意必须严格按照规范,比如说“10010”读作“yi wan ling yi shi”而不是“yi wan ling shi”,“100000”读作“shi wan”而不是“yi shi wan”,“2000”读作“er qian”而不是“liang qian”
格式很重要,我用了tap做标记,就是为了将2000 赌城 er qian
还有就是注意10010 之间的“0”要读出来 而1000 00000的“0”不需要读
具体的问题也是一点一点的解决的,我花了一个多小时!实践出真知,不要被代码吓住了,代码是根据思路走的,与做数学题一样!
参考代码:
#include<iostream>
#include<map>
#include<string>
#include<sstream>
int tap;
using namespace std;
string str[100];
string gcd(int n){
stringstream sstr;
sstr<<n;
string str=sstr.str();
return str;
}
void hello(int c){
string s;
s=gcd(c);
int len=s.length();
if(len>=4){ //第一步
cout<<str[s[0]]<<" "<<"qian"<<" ";
if(s[1]=='0'&&(!(s[2]=='0'&&s[3]=='0'))) cout<<str[s[1]]<<" ";
if(s[1]!='0') cout<<str[s[1]]<<" "<<"bai"<<" ";
if(s[2]=='0') {
if(s[1]!='0'&&(!s[3]=='0'))
cout<<str[s[2]]<<" ";
} else if(s[2]!=0) cout<<str[s[2]]<<" "<<"shi"<<" ";
if(s[3]!='0')
cout<<str[s[3]];
return; //正确
}
//
else if(len>=3){
cout<<str[s[0]]<<" "<<"bai"<<" ";
if(s[1]=='0'&&(!(s[2]='0'))) cout<<str[s[1]]<<" ";
if(s[1]!='0') cout<<str[s[1]]<<" "<<"shi"<<" ";
if(s[2]!='0')
cout<<str[s[2]];
return;
}
//
else if(len>=2){
if(s[0]=='1'&&!tap) cout<<"shi"<<" ";
else cout<<str[s[0]]<<" "<<"shi"<<" ";
if(s[1]!='0') cout<<str[s[1]];
return;
}
//
else if(len>=1){
if(s[0]!='0')
cout<<str[s[0]];
return;
}
else return;
}
int main(){
str['0']="ling";
str['1']="yi";
str['2']="er";
str['3']="san";
str['4']="si";
str['5']="wu";
str['6']="liu";
str['7']="qi";
str['8']="ba";
str['9']="jiu";
int n,a,b,c,d;
while(cin>>n){
if(n==0) cout<<"ling"<<endl;
tap=0; //标记
a=n/100000000;
if(a) //!!!!
{
hello(a);
cout<<" "<<"yi"<<" ";
tap++;
}
b=n%100000000;
c=b/10000;
if(c) { //!!!!
if(c<1000&&a) cout<<"ling"<<" ";
hello(c);
cout<<" "<<"wan"<<" ";
tap++;
}
b=b%10000;
if(b) {
if(b<1000&&c) cout<<"ling"<<" ";
hello(b);
}
}
}
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复