算法:阿拉伯数字转中文读法

阿拉伯数字转中文读法

更新

不考虑以零开头的数字读法,输入以零开头的数字字符串结果会错。
解决办法:判断正负后从第一位数字开始循环判断是否为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
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值