参考代码:

#include<iostream>
#include<string>
using namespace std;

int main()
{
	string num;
	string read = "";
	string s;
	int d = 0;//用来依次访问单位数组中的每一个单位
	string danwei[5] = { "","shi ","bai ","qian ","wan "};
	cin >> num;
	for (int i = num.length() - 1, sign = 0;i >= 0;i--, sign++)//从个位数向依次向高位读,sign自增可记录当前位置
	{
		if ((sign == 4 || sign == 8)) { //对于十万以上的数,单位特殊处理
			d = 0;
			sign == 4 ? s = "wan " : s = "yi ";
		}
		switch (num[i]-'0')
		{
		case 0: read = s + read;d++;
			if (num[i] - '0' == 0 && (sign == 0 || sign == 4 || sign == 8))//个位、万位、亿位的0不读
				break;
			if (num[i + 1] - '0' != 0 ) { //连续的0不读
			read = "ling " + read;
		}
			break;
		case 1:
			if (sign == 5 || sign == 9) //十万位和十亿位的1不读
				read = danwei[d++] + s +  read;
			else
				read = "yi " + danwei[d++] + s + read;
			break;
		case 2:read = "er " + danwei[d++] + s + read;break;
		case 3:read = "san " + danwei[d++] + s + read;break;
		case 4:read = "si " + danwei[d++] + s + read;break;
		case 5:read = "wu " + danwei[d++] + s + read;break;
		case 6:read = "liu " + danwei[d++] + s + read;break;
		case 7:read = "qi " + danwei[d++] + s + read;break;
		case 8:read = "ba " + danwei[d++] + s + read;break;
		case 9:read = "jiu " + danwei[d++] + s + read;break;
		default:
			break;
		}
		s = "";
	}
	cout << read << endl;
	return 0;
}


点赞(0)
 

0.0分

1 人评分

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

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

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

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

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

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

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

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

评论列表 共有 3 条评论

张晓琪 3年前 回复TA
@张晓琪 if(read=="yi wan ") 		      read="yi "; 应该加在那个for循环里面的开头
张晓琪 3年前 回复TA
@张晓琪 有一说一 超喜欢作者这个思路
张晓琪 3年前 回复TA
case 1:
	    if((sign==5||sign==9)&&(i==0))
	      {
		    if(read=="yi wan ")
		      read="yi ";
		    read=danwei[d++]+s+read;
		  }
		else
		   read="yi "+danwei[d++]+s+read;
		break;
这是个人对case1的改进  输入1000000000和5100000时
同样其他case也会遇到  yi wan 问题 需要加入是否是 read=="yi wan"  小白观点,希望指教