人民币金额大写

在与财务相关的应用中,经常会用到人民币金额的大写,比如发票的打印程序。

本题的任务是:从键盘输入一个十亿以内的正整数(int类型),把它转换为人民币金额大写(不考虑用户输入错误的情况)。

比如,用户输入:35201,程序输出:叁万伍仟贰佰零壹

用户输入:30201,程序输出:叁万零贰佰零壹

用户输入:30001,程序输出:叁万零壹

用户输入:31000,程序输出:叁万壹仟

用户输入:120023201,程序输出:壹亿贰仟零贰万叁仟贰佰零壹

用户输入:120020001,程序输出:壹亿贰仟零贰万零壹

用户输入:100000001,程序输出:壹亿零壹

可以看到,在万后满千位,则不加零,否则要补零,但不要出现类似“零零”的情况。

在亿后满千万位,则不加零,否则要补零,但整个“万档”没有数字时,“万”字省去。

运行结果:

输入一个十亿以内的正整数(int类型) 

120023201 

壹亿贰仟零贰万叁仟贰佰零壹 

package mec.lanqiao;

import java.util.*;

public class Main {

	static char[] upper = { '零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖' }; // 大写数字

	// 获取一个四位数的大写字符串,零的数目可以为多个
	static String addZero(String t) {
		StringBuilder sb = new StringBuilder();
		int n1 = Integer.parseInt("" + t.charAt(0));
		int n2 = Integer.parseInt("" + t.charAt(1));
		int n3 = Integer.parseInt("" + t.charAt(2));
		int n4 = Integer.parseInt("" + t.charAt(3));
		if (n1 == 0) {
			sb.append("零");
		} else {
			sb.append(upper[n1] + "仟");
		}
		if (n2 == 0) {
			sb.append("零");
		} else {
			sb.append(upper[n2] + "佰");
		}
		if (n3 == 0) {
			sb.append("零");
		} else {
			sb.append(upper[n3] + "拾");
		}
		if (n4 != 0) {
			sb.append(upper[n4]);
		}
		return sb.toString();
	}

	static void f(String num) {
		int len = num.length();
		if (len < 5) {
			for (int i = 0; i < 4 - len; i++) {
				num = "0" + num;
			}
			String s = addZero(num);
			// 去尾部的零
			while (s.endsWith("零")) {
				s = s.substring(0, s.length() - 1);
			}
			// 去首部的零
			while (s.startsWith("零")) {
				s = s.substring(1);
			}
			// 消除重复的零
			s = s.replaceAll("零零零", "零");
			s = s.replaceAll("零零", "零");
			System.out.println(s);
		} else if (len < 9) {
			String s, s1, s2;
			s1 = num.substring(0, num.length() - 4);
			int i = 4 - s1.length();
			while (i-- > 0) {
				s1 = "0" + s1;
			}
			s1 = addZero(s1) + "万";
			s2 = num.substring(num.length() - 4);
			s2 = addZero(s2);
			s = s1 + s2;
			while (s.endsWith("零")) {
				s = s.substring(0, s.length() - 1);
			}
			while (s.startsWith("零")) {
				s = s.substring(1);
			}
			s = s.replaceAll("零零零", "零");
			s = s.replaceAll("零零", "零");
			System.out.println(s);
		} else {
			String s, s1, s2, s3;
			s1 = num.substring(0, num.length() - 8);
			int i = 4 - s1.length();
			while (i-- > 0) {
				s1 = "0" + s1;
			}
			s2 = num.substring(num.length() - 8, num.length() - 4);
			s3 = num.substring(num.length() - 4);
			s1 = addZero(s1) + "亿";
			s2 = addZero(s2) + "万";
			s3 = addZero(s3);
			s = s1 + s2 + s3;
			while (s.endsWith("零")) {
				s = s.substring(0, s.length() - 1);
			}
			while (s.startsWith("零")) {
				s = s.substring(1);
			}
			s = s.replaceAll("零零零", "零");
			s = s.replaceAll("零零", "零");
			System.out.println(s);
		}
	}

	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		String num = scan.next();
		scan.close();
		f(num);
	}
}
点赞