【牛客网OJ题】:人民币转换

浪尽此生 提交于 2020-03-02 17:14:00

【牛客网题目:人民币转换】
1、中文大写金额数字前应标明“人民币”字样。中文大写金额数字应用
壹、贰、叁、肆、伍、陆、柒、捌、玖、拾、佰、仟、万、亿、元、角、分、零、整等字样填写。(30分)
2、中文大写金额数字到“元”为止的,在“元”之后,应写“整字,
如¥ 532.00应写成“人民币伍佰叁拾贰元整”。在”角“和”分“后面不写”整字。(30分)
3、阿拉伯数字中间有“0”时,中文大写要写“零”字,阿拉伯数字中间连续有几个“0”时,
中文大写金额中间只写一个“零”字,如¥6007.14,应写成“人民币陆仟零柒元壹角肆分“。


输入描述:
输入一个double数

输出描述:
输出人民币格式

输入例子
151121.15

**输出
人民币拾伍万壹仟壹佰贰拾壹元壹角伍分

    import java.util.Scanner;

public class RenMingBiTranslate {

private final static char[] NUM = {'零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖', '拾',   '佰', '仟', '万', '亿'};//数组下标和其对应元素是一样的
public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        double d = scanner.nextDouble();
        System.out.println(convert(d));
}
private static String convert(double d) {//处理了小数部分
        long n = (long) d;//将double转为long,变成整型
    StringBuilder builder = new StringBuilder("人民币");

    // 处理整数部分,前提是整数部分大于0
    if (n > 0) {
            convert(n, builder);
            builder.append('元');
    }
    // 加上0.0001是为了防止d*100发生失真
    int v = (int) (d * 100 - n * 100 + 0.0001);//将小数扩大成整数
    int i = v / 10;//小数部分  0.1
    int j = v % 10;//小数部分  0.01

    if (i == 0 && j == 0) {//题目要求  分角是0,单位+整
            builder.append('整');

            return builder.toString();
    }

    if (i != 0) {//0.1位置有值
            builder.append(NUM[i]).append('角');//追加其 值和单位
    }

    if (j != 0) {
            builder.append(NUM[j]).append('分');
    }

    return builder.toString();

}

private static void convert(long n, StringBuilder builder) {//整数部分
// 大于一亿
if (n >= 1_0000_0000) {
long q = n / 1_0000_0000;
long r = n % 1_0000_0000;

            convert(q, builder);
            builder.append('亿');

            // 是亿的整数倍
            if (r != 0) {
                    convert(r, builder);
            }
    }
    // 大于一万
    else if (n >= 1_0000) {
            long q = n / 1_0000;
            long r = n % 1_0000;

            convert(q, builder);
            builder.append('万');

            // 是亿的整数倍
            if (r != 0) {

                    if (r < 100) {//有1个或者2个零
                            builder.append('零');//只追加一个0
                    }

                    convert(r, builder);
            }
    }
    // 大于一千
    else if (n >= 1000) {
            long q = n / 1000;
            long r = n % 1000;

            convert(q, builder);
            builder.append('仟');

            // 是亿的整数倍
            if (r != 0) {

                    if (r < 100) {//同上理
                            builder.append('零');
                    }

                    convert(r, builder);
            }
    }
    // 大于一百
    else if (n >= 100) {
            long q = n / 100;
            long r = n % 100;

            convert(q, builder);
            builder.append('佰');

            // 是亿的整数倍
            if (r != 0) {

                    if (r < 10) {//有一个0
                            builder.append('零');
                    }

                    convert(r, builder);
            }
    }
    // 大于十
    else if (n >= 10) {     
            long q = n / 10;
            long r = n % 10;

            if (q >= 1) {
                    convert(q, builder);//最终走到最下面的NUM[]  0-9
            }
            builder.append('拾');//再带单位

            // 是亿的整数倍
            if (r != 0) {//走到下面的NUM【0-9】
                    convert(r, builder);
            }

    } else {//<10    0-9
            builder.append(NUM[(int) n]);
    }

}
}

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!