qtL0ng


私信TA

用户名:qtL0ng

访问量:4907

签 名:

等  级
排  名 6008
经  验 1468
参赛次数 0
文章发表 33
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

参考代码:

#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 人评分

  评论区

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"  小白观点,希望指教
2021-04-15 09:28:53
  • «
  • 1
  • »