最近看到一个笔试题,阿拉伯数字和汉字数字的互相转化,网上比较多的是python和java的实现,这里对C++的实现做了整理和改动。
要实现的功能是将正整数转成汉字数字,忽略小数部分(小数部分就是一对一的映射,也比较容易实现)。例如这几个测试用例:
18->十八
180->一百八十
20930->两万零九百三十
129809->十二万九千八百零九
200182190->二亿零一十八万二千一百九十
观察发现与一一对应的不同之处在于,我们用汉字称呼时要加上单位和省略多处零,并且每万位会循环从千开始称呼,例如:
12301230 =>一千二百三十万 一千二百三十
而不是被叫做 一千万二百万三十万 一千二百三十
实现以上功能的完整C++如下(详解见注释)
#include
#include
using namespace std;
string AA[] = { "零" ,"一","二","三","四","五","六","七","八","九","十" };
string BB[] = { "","十","百","千","万","十万","百万"