最近看到一个笔试题,阿拉伯数字和汉字数字的互相转化,网上比较多的是python和java的实现,这里对C++的实现做了整理和改动。

要实现的功能是将正整数转成汉字数字,忽略小数部分(小数部分就是一对一的映射,也比较容易实现)。例如这几个测试用例:

18->十八

180->一百八十

20930->两万零九百三十

129809->十二万九千八百零九

200182190->二亿零一十八万二千一百九十

观察发现与一一对应的不同之处在于,我们用汉字称呼时要加上单位和省略多处零,并且每万位会循环从千开始称呼,例如:

12301230 =>一千二百三十万 一千二百三十

而不是被叫做 一千万二百万三十万 一千二百三十

实现以上功能的完整C++如下(详解见注释)

#include#includeusing namespace std;

string AA[] = { "零" ,"一","二","三","四","五","六","七","八","九","十" };string BB[] = { "","十","百","千","万","十万","百万","千万","亿" };

string NumberToChinese1(int num){     string res = "";    string numstr = to_string(num); /* to_string函数转成字符串,可自动去掉 00123前面的00 */    int k = numstr.length();

 for (int i = 0; i        {                           int tmp = numstr[i] - '0';// 得到每位的数字的大小            int bIndex = k - i - 1; // 得到从个位算起的位数个数

            // cout</*  先处理该位数是0的情况,如果发现一位数是0,如果是在个位,或者它后面一位也是0,就不添加汉字零             比如10020,读作一万零二十,而不是 一万零零二十零  */if(0==tmp)            {   // cout<// cout<// cout</* 每万位的汉字计数规则会重复一下,例如12301230 一千二百三十万 一千二百三十,每万位的最低位不加零,但加上一个万级单位 */if (bIndex >= 4 && 0 == bIndex % 4)                    res = res + BB[bIndex];/* 中间重复的0或者是0个位就跳过加零 */else if (('0' == numstr[i+1] && i-1 ) || i == numstr.length() - 1 )continue;else/* 如果不是以上情况,0对应汉字位置加个零字符 AA[0] */                    res = res + AA[tmp];// cout<            }                   else            {   /* 对于该位数非0,正常添加对应汉字数字 */                res = res + AA[tmp];// cout</* 对于最开头会被称作十几的数字,如果除万后余两位,并且1开头,在从左数第一位的时候删掉十位的汉字一,常读作十几而不是一十几 */if ( k%4 == 2 && numstr[0] == '1' && i==0)                {                    res.erase(0); /* 删掉第0个字符 */                }if (0 == bIndex % 4)  /* 对于非零的位置,也要看是否是每万位,是的话要加上"万","亿" */                    res = res + BB[bIndex];else                {                res = res + BB[bIndex % 4]; /* 对每万位以内的数字,每万位以内正常添加“十”,“千”,“百”的单位,即位数取4的余数对应的单位 */                }// cout<            }        }return res;}int main(){/* int类型在C语言中占4个字bai节,即32个二进制位,-2^31~2^31-1=最大值2147483647      如需扩展的话 可用long long是双精度整数,占用8个字节,范围-1.7*10负308次方~1.7*10的308次方 */int m;  while (cin >> m)  /* 输入一个 int 型范围内的正整数 m */    {if (0 == m)        {cout <"零" <endl;        }else        {string ChineseStr = "";            ChineseStr = NumberToChinese1(m);cout <endl;        }    }    system("pause");return 0;}

测试结果如下

# 去掉开头数字_阿拉伯数字转汉字相关推荐

  1. 迅飞语音数字匹配阿拉伯数字或汉字

    1. 说明 最近项目需求中集成了迅飞语音听写功能,遇到一个问题:比如说:"一百个商品",返回的文字为大写汉字,而不是"100个商品",项目中需要的是阿拉伯数字, ...

  2. pdf 模版 汉字和数字_写好汉字和数字,这是最标准的格式!(强烈推荐收藏)...

    原标题:写好汉字和数字,这是最标准的格式!(强烈推荐收藏) 都说字如其人,写得一手好字,将会让我们终身受用.为了写好字,孩子就必须从小练起.对于练字这项基础功,家长可不能忽视. 今天中教君就给大家讲讲 ...

  3. jq 数字转中文数字_阿拉伯数字 转换 中文大写

    阿拉伯数字 转换 中文大写 class ToChineseNumber { private $money = ""; private $cnynums = array(" ...

  4. 阿拉伯数字转换为汉字大写数字

    阿拉伯数字转换为汉字大写数字: 首先需要建立两个视图: create view V_HZNumber as     SELECT 0 F1,'零' F2,'个' F3 UNION     SELECT ...

  5. python数字转中文_阿拉伯数字转换为中文数字的python实现

    #!/usr/bin/python # -*- coding: utf-8 -*- ''' 脚本功能:阿拉伯数字与中文数字转换 输入参数:阿拉伯数字,不带符号 初次编写日期:2018-07-24 说明 ...

  6. python123数字转换_Python将汉字数字转换成阿拉伯数字的方法

    用Python将汉字数字转换成阿拉伯数字的方法.汉字数字就是我们的大写数字:零.壹.贰.叁.肆.伍.陆.柒.捌.玖.拾,这种只有在会计人员才会常用的数字. Python把用汉字表示的数字转换为阿拉伯数 ...

  7. python 汉字数字转阿拉伯数字

    主要用于大写数字转阿拉伯数字 CN_NUM = {'〇': 0, '一': 1, '二': 2, '三': 3, '四': 4, '五': 5, '六': 6, '七': 7, '八': 8, '九' ...

  8. 猜灯谜_全排列板子题(A 村的元宵节灯会上有一迷题: 请猜谜 × 请猜谜 = 请边赏灯边猜 小明想,一定是每个汉字代表一个数字,不同的汉字代表不同的数字。 请你用计算机按小明的思路算一下,然后)

    题目描述 A 村的元宵节灯会上有一迷题: 请猜谜 × 请猜谜 = 请边赏灯边猜 小明想,一定是每个汉字代表一个数字,不同的汉字代表不同的数字. 请你用计算机按小明的思路算一下,然后提交"请猜 ...

  9. PostgreSQL 中文(汉字)数字转阿拉伯数字

    PostgreSQL 中文(简体.繁体)数字转阿拉伯数字 函数代码 --中文汉字转阿拉伯数字 CREATE OR REPLACE FUNCTION udf_hanzi2digits(input_chi ...

最新文章

  1. 移动应用开发者应该关注的 Google I/O 两项更新
  2. 如何用LogQL在几秒内查询TB级的日志
  3. Intel Realsense D435 composite_frame类 frame类 video_frame类 depth_frame类的关系
  4. Android之Base64
  5. P5004-专心OI - 跳房子【dp,矩阵乘法】
  6. HTML+CSS+JS实现 ❤️ 宇宙星球旋转动画特效❤️
  7. 李宏毅机器学习——结构化学习(一)
  8. 拓端tecdat|R语言蒙特卡洛计算和快速傅立叶变换计算矩生成函数
  9. 论文阅读笔记|Deep Image Homography Estimation
  10. 1250_FreeRTOS_QEMU_M3_blinky例程梳理分析
  11. 如何使用计算机远程关闭手机软件,如何用手机远程控制电脑关机
  12. hdu2243之AC自动机+矩阵乘法
  13. 美团外卖开放平台对接经验总结(一)
  14. 苹果有arkit,android,ARKit来袭:苹果ar支持哪些设备,苹果手机怎么使用ar?
  15. 深入理解wifi direct
  16. r语言alasso的系数怎么看_R语言用msgps包做adaptive lasso,系数怎么提取啊?
  17. mac brew 测速 软件_Mac已到手?从零开始,八步打造一个高效舒适的开发环境
  18. vanilla_包装Vanilla JavaScript软件包以在React中使用
  19. java判断输入回车符_Java编程:获取用户是否输入回车符
  20. GEE(python)使用GPM降水数据进行趋势分析,MK检验等

热门文章

  1. 二进制安装k8s-部署scheduler
  2. 工作记录:举步维艰的在线 word 之旅 - tinymce
  3. Adobe的音频编辑软件Adobe Audition (Au)2023版本下载与安装教程
  4. java面向对象设计_Java面向对象设计 构造函数设计
  5. Citespace教程笔记
  6. 华为手机鸿蒙系统桌面便签怎么设置?
  7. 码率自适应技术 (Adaptive Bitrate Streaming,ABR)
  8. AD导出3D模型的各种方法——AD转SW(贴图形式)
  9. 【Linux】循序渐进学运维-服务篇-rsync配置文件
  10. 【ATS】苹果传输数据ATS认证究竟是什么?