原题链接:蓝桥杯基础练习VIP-数的读法
参考代码:
#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分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
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" 小白观点,希望指教