阿拉伯数字转换成中文读法的C语言程序

记一道评论区的题目

​ 导语 : 作为一个西电的菜鸡 , 每天只能和不超过两天的ddl较劲 , 啥也不懂 , 啥也不会. 因为家里硬盘不太够了所以把作业的代码传到博客里保存. 可以预见到的 , 遭到了真正大佬的嘲笑. 其中 , 二哥在讨论区里留下一道题目 , 我觉得还挺有意思的. 所以试着实现了一下 , 作为博客的第二篇拙作.

1.题目

在这里插入图片描述

​ 分析一下 , 是想实现一个小写数字到中文大写数字的转化. 那么 , 如果我们想要实现这个功能 , 首先我们要重新回顾一下中文数字的读法和英文读法的区别.

2.回顾背后的数学知识

​ 我们在小学二年级的时候就学过数字的读法 , 在初中的时候基本上了解到了英文的数字的读法.

比如对于31980 , 中文读作"三万一千九百八十" , 英文读作"tirty-one thousand and nine hundred eighty". 那么中文和英文对于数字的读法来说有什么不同呢?

​ 首先 , 我们要了解一下中文和英文当中对于数字的单位. 在中文中 , 有个 , 十 , 百 , 千 , 万 , 十万 , 百万 , 千万 , 亿 , 十亿… 在英文中 , 有1-20的不同的读法 , x0的读法 , hundred , thousand , million , billion… 通过比较我们不难发现其规律. 中文的数字单位是以四个为一循环 , 比如四位引出一个万 , 再四位引出一个亿. 而英语中是以三位为一个计数段 , 引出一个定义的单位.
1 , 000 , 000 , 000 1,000,000,000 1,000,000,000

英语国家的人看数字的方式.

10 , 0000 , 0000 10,0000,0000 10,0000,0000

中国人看数字的方式.

​ 两者相似的 , 对于比较小的位数划分的比较详细一些 , 而对于比较大的位数 , 中国人采取与小位数的单位相结合同时适度引入新单位来记录数字 , 而英语采用每三位定义一个单位的方式记录数字.

​ 对于中文来说 , 比较特殊的一点是 , 如果在数的中间有0的话习惯中间读一个"零"表示区分层次.

如 : 1023读作"一千零二十三" , 但是如果从某一位开始之后全是0的情况下则不读这个0. 而这个"零"的读法便是这个小demo最有意思的地方.

3.程序设计和算法思路

​ 通过上面对问题的回顾 , 我们大致可以想到一个思路. 将一个数字按4位为一组分隔开. 将0-9999的数实现向中文的转换 , 然后在后面加上单位即可. 比如12345 , 可以看作1,2345 , 那么第一组2345就读作"二千三百四十五" , 这里为了叙述方便 , 将中文大写数字"壹"写作了中文小写数字"一". 这一组因为最低位是个位 , 所以单位为空. 而第二组只有一个1 , 读作"一" , 它处于万位上. 所以后面加上单位"万". 所以读作"一万二千三百四十五".

​ 下面主要讨论如何将0-9999内的数字实现. 很自然的 , 我们想到模拟人来读数字的方法. 首先,我们将所读数的千位 , 百位 , 十位 , 个位存在一个整型数组里.
下 面 列 出 需 要 讨 论 的 几 种 情 况 : 1234 1 , 2 , 3 , 4 1 0 , 0 , 0 , 1 1001 1 , 0 , 0 , 1 1000 1 , 0 , 0 , 0 1110 1 , 1 , 1 , 0 0 0 , 0 , 0 , 0 下面列出需要讨论的几种情况:\\ 1234\\ 1,2,3,4\\ 1\\ 0,0,0,1\\ 1001\\ 1,0,0,1\\ 1000\\ 1,0,0,0\\ 1110\\ 1,1,1,0\\ 0\\ 0,0,0,0 :12341,2,3,410,0,0,110011,0,0,110001,0,0

  • 16
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值