解题思路:
帮别人写的有注释,顺便发个题解,看代码应该就理解了。
参考代码:

#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.0分

1 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论