华为OJ 初级:人民币转换
来源:互联网 发布:程序员女神 赵洁琼 编辑:程序博客网 时间:2024/06/09 20:01
输入一个doulbe数
输出人民币格式
注:
下面乱码为:
人民币拾伍万壹仟壹佰贰拾壹元壹角伍分
人民币拾伍万壹仟壹佰贰拾壹元壹角伍分
import java.util.Arrays;import java.util.Scanner;public class Main{public static final char[] chNumSet = "零壹贰叁肆伍陆柒捌玖".toCharArray();public static final char[] chPowSet = "分角元拾佰仟万拾佰仟亿拾佰仟万".toCharArray();public static void main(String[] args) {new Main().go();}private void go() {// 读入一个数值Scanner console = new Scanner(System.in);while (console.hasNext()) {double d = console.nextDouble();// 解析该数值为汉字形式long l = (long) (d * 100);String strRes = parse(l);System.out.println("人民币" + strRes);}}private String parse(long n) {if (n == 0) {return "零元整";}StringBuilder sb = new StringBuilder();// 将数值解析为单个数值的数组int[] nums = toNum(n);for (int i = nums.length - 1; i >= 0; i--) {sb.append(chNumSet[nums[i]]);sb.append(chPowSet[i]);}String res = sb.toString().replaceAll("零[分角拾佰仟]", "零").replaceAll("零+", "零").replaceAll("零+元", "元").replaceAll("零+万", "万").replaceAll("零+亿", "亿").replaceAll("亿万", "亿");if (res.startsWith("壹拾")) {res = res.substring(1);}if (res.endsWith("零")) {res = res.substring(0, res.length() - 1);}if (res.endsWith("元")) {res = res + "整";}return res;}private int[] toNum(long n) {int[] res = new int[0];while (n != 0) {int end = (int) (n % 10L);// 扩展数组的长度res = Arrays.copyOf(res, res.length + 1);res[res.length - 1] = end;n /= 10L;}return res;}}
之前看的别人的解法,我觉得挺巧妙的,找不到原文出处了
0 0
- 华为OJ 初级:人民币转换
- 华为oj初级 人民币转换
- 华为oj 人民币转换
- 华为OJ(人民币转换)
- 【华为OJ】【105-人民币转换】
- 华为OJ——人民币转换
- 华为OJ 初级:进制转换
- 华为oj初级 进制转换
- Huawei OJ-人民币转换
- 华为OJ 初级:等差数列
- 华为OJ 初级:记负均正
- 华为OJ 初级:多线程
- 华为OJ 初级:合唱队
- 华为OJ 初级 合唱队
- 华为oj初级 记负均正
- 华为oj初级 等差数列
- 华为OJ 初级:句子逆序
- 华为OJ 初级:字符串反转
- Java ClassLoader的一些事
- NYOJ 58 最少步数(广搜入门经典)
- 软件构架、架构和框架的区别
- Ubuntu16.04 GCC5.4.0降级到GCC5.3.0
- OpenCV read video
- 华为OJ 初级:人民币转换
- linux shell 自动输入y/yes
- js改变style样式和css样式
- 操作系统读书笔记(4)
- 89. Gray Code
- 【DM】设计模式再回顾---简单工厂模式
- idea创建
- 开发安全的web应用程序
- 3.1.3连续分配管理方式