oj美元和人民币java_【牛客网OJ题】:人民币转换

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

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]);

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值