首页 > 编程知识 正文

小写数字转换成大写数字怎么转换,小写数字怎么转换成大写数字

时间:2023-05-04 18:13:47 阅读:241098 作者:822

前两天看到一道题,关于小写数字转换成大写的。也就是将“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++) { // 获取每位上的数字d int 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=%sn", 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五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。