原题链接:蓝桥杯基础练习VIP-数的读法
解题思路:
帮别人写的有注释,顺便发个题解,看代码应该就理解了。
参考代码:
#include<iostream> #include<string> using namespace std; int a[20]; string s1[10]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"}; string s2[4]={"","shi","bai","qian"}; string s3[3]={"","wan","yi"}; int main(){ int n,ret=0,f1=0,f2=0; // f1判断 0 是否出现 cin>>n; // f2判断是否出现数字(4位一组,个、十、白、千) while(n){ a[ret++]=n%10; // 用数组倒序存储每一位数字 n/=10; } for(int i=ret-1;i>=0;i--){ //相当于正序读数字 if(a[i]==0){ //判断0是否出现 f1=f2=1; } else{ //不是0的情况 if(f1==1) //如果前面出现了0,输出一个ling cout<<"ling "; if(a[i]==1&&i%4==1&&f2==0) //判断是否输出十,否则是输出一十,如果当前十位为1并且前面没有出现数字,也就是f2==0输出十,否则输出一十。 cout<<s2[i%4]<<" "; else if(i%4!=0) //正常输出数字读音和当前位的读音,还需判断当前是否是4位中的个位 cout<<s1[a[i]]<<" "<<s2[i%4]<<" "; else // 是个位就输出数字读音就行。 cout<<s1[a[i]]<<" "; f1=0; // 0当成没出现 f2=1; // 当前出现了数字 } if(i%4==0){ // 这时是4位的最后一位,个位 if(i!=0) //不是最后一位的话就输出亿,或者万 cout<<s3[i/4]<<" "; f1=f2=0; //重新开始标记 ,4位循环 } } }
0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复