前两天看到一道题,关于小写数字转换成大写的。也就是将“1023050405”这样的数字转换为“十亿二千三百零五万零四百零五”。

这个是个算法问题,其它语言也是相通的。

  • 其中的难点应该是对零的处理。

我写的代码如下,以Java为例(因为搞安卓的嘛),这里以整型作为参数,如果你感兴趣,可以做一些改动以小数作为参数:

/*** @author Binzo* @date 20161203* @param number 整型参数。例如:1023050405* @return 根据整型参数返回大写数字。例如:十亿二千三百零五万零四百零五*/
public static String convertToSimplifiedChinese(int number){final String[] TAG_DIGIT = {"零", "一", "二", "三", "四", "五", "六", "七", "八", "九"};final String[] TAG_WEIGHT = {"", "十", "百", "千", "万", "十", "百", "千", "亿", "十", "百", "千", "兆"};String numberString = String.valueOf(number);char[] digits = numberString.toCharArray();StringBuffer sb = new StringBuffer();for (int i = 0; i < digits.length; i++) {// 获取每位上的数字dint d = Integer.valueOf(String.valueOf(digits[i]));String digit = TAG_DIGIT[d];// 反转,for循环是低位~高位,反转后即高位~低位int index = digits.length - i - 1;String weight = TAG_WEIGHT[index];if (DEBUG){System.out.printf("index=%d,", index);System.out.printf("digit=%s,", digit);System.out.printf("weight=%s\n", weight);}if (d == 0 && index % 4 == 0) {// 万、亿 作为一个过渡位sb.append(weight);} else if (d == 0) {sb.append(digit);} else if (d == 1 && index % 4 == 1) {// 类似于15,转换为"十五",而不用"一十五"sb.append(weight);} else {sb.append(digit);sb.append(weight);}}if (DEBUG){System.out.printf("%d : ", number);System.out.println(sb.toString());}return sb.toString();
}

在网上可以搜索到很多种版本,毕竟这是一个比较基础的算法题。
比如这篇:http://blog.csdn.net/zgrjkflmkyc/article/details/14517789
或者:https://www.oschina.net/code/snippet_137848_4896

等等,观察了一些实现方法,但最后还是自己写了一个不同的,我觉得我这个版本还是结构相对简洁些的。

一开始,自己觉得这是一个很容易实现的算法,但是真写起来也花了好一会儿时间。而后我又实现了大写中文货币格式、以及大写的美国货币格式。如下图的输出结果所示:

小写数字转换为英文大写货币形式如:
1023150405 对应:
U.S. DOLLARS ONE BILLION,TWENTY-THREE MILLION,ONE HUNDRED AND FIFTY THOUSAND,FOUR HUNDRED AND FIVE ONLY

原理还是跟我这段代码中的是相通的,只是英文的就步骤多了几个,如果你也用得上,欢迎探讨,共同学习。

小写数字转换成大写数字相关推荐

  1. 将(123)数字转换成大写数字(壹,贰,弎)

    此方法 将(123)数字转换成大写数字(壹,贰,弎) RMBUtils.toChineseUnit()

  2. C/C++小写数字转换成大写数字

    #include<stdio.h> void main() { double x,y; char *ch[]={"零","壹","贰&qu ...

  3. 小写数字转大写_不得不说的Excel小技巧:设置单元格格式将小写金额转换成大写...

    大家好,我是小秋,近期一段时间比较忙,没有在今日头条上更新原创文章了.希望朋友们多多见谅,下面与大家分享一个Excel实用小技巧:如何设置单元格格式将小写金额转换成大写? 1.应用场景 在报销单.收据 ...

  4. C语言自学路之将小写数字完美转换成大写数字

    C语言自学路之将小写数字完美转换成大写数字 # define N 6:6位及以内的整数(小数点后不计) PS:中间两条测试数组正确性的可以忽视,我只是每敲一点都喜欢运行测试一下- #include & ...

  5. 使用 C# 将数字转换成大写人民币

    贴段最近在项目中用到的一个函数. 因涉及到财务,需要把数字符转换成大写人民币汉字,于是自己动手写了一个,使用的算法比较笨,各位看客不要笑啊. 可转换数字大小在10亿以下,超过的,就无能为力了,不过大家 ...

  6. win7计算机名改成大写,处置win7系统将word中的阿拉伯数字转换成大写数字的还原方案...

    随着电脑的使用率越来越高,我们有时候可能会遇到对win7系统将word中的阿拉伯数字转换成大写数字进行设置,如果我们需要对win7系统将word中的阿拉伯数字转换成大写数字进行设置时,要怎么处理win ...

  7. C小程序-将输入的数字转换成大写汉字

    C小程序-将输入的数字转换成大写汉字C int money,count=0;int i=0;int moneys[6];//定义了输入数字的最高位数char unit[10][2]={"零& ...

  8. 阿拉伯数字转换成大写数字

    本文转载自http://blog.csdn.net/yeah86/article/details/3456706 之前在CSDN论坛里,看有人Show了一些把中文大写转换成阿拉伯数字的程序代码,自己也 ...

  9. 将小写人民币转换成大写

    将小写人民币转换成大写 public class MoneyUtil { public static String toChinese(String str) { /** 大写数字 */ String ...

最新文章

  1. 俄罗斯自研Elbrus CPU参数曝光,CEO年近九旬仍未退休
  2. 纯CSS实现下拉菜单及下拉容器等(纯CSS实现导航条及导航下拉容器)
  3. CSS 中的内联元素、块级元素以及display的各个属性的特点
  4. 一些值得好好学习的博客或者网站
  5. Android -- 无线网络配置信息的管理者WifiConfigStore简介
  6. java vector pair_STL: list ,set ,pair.map的使用
  7. 2020年净利润腰斩,麦格纳要转型“造车”?
  8. 带蒙版的安卓剪辑软件_史上最全的手机剪辑软件测评,最好用的竟然没人听过?!...
  9. 关于unity打包apk在手机上安装失败(-108)
  10. android仿京东跑马灯,RecyclerView实现跑马灯效果
  11. The first GAN——Generative Adversarial Nets
  12. DNSPod十问Neha Naik:以人民币结算海外IT业务的可能性?
  13. 写给你看的Python Web 岗位分析,求职必备
  14. 20个关于可视化图表设计的技巧
  15. PlatoFarm推出正式版游戏经济模型的特点分析
  16. 基于大数据的动漫影视可视化分析系统
  17. Cdn英文的读音音标_根据中文名取英文名2019
  18. 修改服务器端数据库,问道1.6 开区 服务器环境配置 数据库修改 服务端启动教程...
  19. Python爬虫之实现百度翻译
  20. 2021壁纸网站大集合优质壁纸,4k,8k,应有尽有!

热门文章

  1. conda查找安装包并安装指定版本的安装包
  2. unity泛型单例模式Singleton
  3. 对数函数泰勒级数展开式
  4. 程序是怎样跑起来的-读书文摘
  5. 一度智信在拼多多上开店靠谱吗?
  6. python爬虫--爬取链家租房信息
  7. wpf 字体模糊_WPF Effect 造成的字体模糊
  8. CentOS7创建组删除组创建用户删除用户
  9. win7无法看到工作组计算机,Win7系统无法查看工作组问题的解决方法
  10. android显示器,古董 or 真香? ThinkVision 28: 28'' 4K Android 显示器开箱