更新
不考虑以零开头的数字读法,输入以零开头的数字字符串结果会错。
解决办法:判断正负后从第一位数字开始循环判断是否为0直到不为0跳出判断,循环过程中用一个变量来记录开头为零的个数,则能确定不为零开头的数字字符的位置,然后用本文输出算法输出即可。
算法题目
输入:阿拉伯数字的整数字符串
输出:中文计数读法
case
输入:-2
输出:负二
输入:10
输出:十
输入:100
输出:一百
输入:101
输出:一百零一
输入:100001
输出:十万零一
输入:120500015076035012349870
输出:一千二百零五万零一亿五千零七十六万零三百五十亿一千二百三十四万九千八百七十
思路
C++:
用string来存储输入,用length()函数来获取字符串长度,用c_str()函数转换成const char类型,方便对每一位数字进行操作。
定义int型变量zf用来标志数字串的正负,正为0负为1,则数字长度为length-zf。
对于长数字以8位数(亿)为一组进行读出,因为高位的8位和低位的8位读法出了后面加个亿就没什么不同。例如:1234567812345678读作:
一千二百三十四万五千六百七十八*亿**一千二百三十四万五千六百七十八
其中亿字左右读法相同。
数字串长度对8取余取商分别为最高位以亿为单位的数字串长度和一共分多少组。最高位以亿为单位的数字串长度不足8位则用零来补充。
因此,读出函数:
int print8(char a1, char a2, char a3, char a4, char a5, char a6, char a7, char a8, int wei);
函数输入:8位字符,和实际位数。控制台输出读法。
int print1(char in);
函数功能为:输入单个字符型数字,控制台输出对应汉字。
最后
int printnumstring(string s);
用来读出整个字符串。
代码
int print1(char in)
{
int x = in - '0';
switch (x)
{
case 0:
cout << "零";
break;
case 1:
cout << "一";
break;
case 2:
cout << "二";
break;
case 3:
cout << "三";
break;
case 4:
cout << "四";
break;
case 5:
cout << "五";
break;
case 6:
cout << "六";
break;
case 7:
cout << "七";
break;
case 8:
cout << "八";
break;
case 9:
cout << "九";
break;
default:
cout << endl << "输入错误" << endl;
break;
}
return 0;
}
i