在与财务相关的应用中,经常会用到人民币金额的大写,比如发票的打印程序。
本题的任务是:从键盘输入一个十亿以内的正整数(int类型),把它转换为人民币金额大写(不考虑用户输入错误的情况)。
比如,用户输入:35201,程序输出:叁万伍仟贰佰零壹
用户输入:30201,程序输出:叁万零贰佰零壹
用户输入:30001,程序输出:叁万零壹
用户输入:31000,程序输出:叁万壹仟
用户输入:120023201,程序输出:壹亿贰仟零贰万叁仟贰佰零壹
用户输入:120020001,程序输出:壹亿贰仟零贰万零壹
用户输入:100000001,程序输出:壹亿零壹
可以看到,在万后满千位,则不加零,否则要补零,但不要出现类似“零零”的情况。
在亿后满千万位,则不加零,否则要补零,但整个“万档”没有数字时,“万”字省去。
package com.liu.ex7; import java.util.Scanner; public class Main { public static String[] A = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"}; public String getPart(String temp) { int num = Integer.valueOf(temp); //除去字符串前0 temp = num + ""; String result = ""; int len = temp.length(); for(int i = 0, j = len;i < len;i++, j--) { int number = temp.charAt(i) - '0'; if(number == 0) { //0在个位 if(i == len - 1) break; //0在十位 if(len == 3 && i == 1) { int number1 = temp.charAt(i + 1) - '0'; if(number1 == 0) break; else result = result + A[0]; } //0在十位 if(len == 4 && i == 2) { int number1 = temp.charAt(i + 1) - '0'; if(number1 == 0) break; else result = result + A[0]; } //0在百位 if(len == 4 && i == 1) { int number1 = temp.charAt(i + 1) - '0'; int number2 = temp.charAt(i + 2) - '0'; if(number1 != 0) result = result + A[0]; else if(number1 == 0 && number2 != 0) { i = i + 1; j = j - 1; result = result + A[0]; } else if(number1 == 0 && number2 == 0) { break; } } } if(number != 0) { result = result + A[number]; if(j == 4) result = result + "仟"; else if(j == 3) result = result + "佰"; else if(j == 2) result = result + "拾"; } } return result; } public void getResult(int n) { String result = ""; String temp = "" + n; int len = temp.length(); if(len >= 9) { String temp1 = temp.substring(len - 4, len); String temp2 = temp.substring(len - 8, len - 4); String temp3 = temp.substring(0, len - 8); result = result + getPart(temp3) + "亿"; if(Integer.valueOf(temp2) < 1000 && Integer.valueOf(temp2) != 0) result = result + A[0]; if(Integer.valueOf(temp2) == 0) result = result + A[0]; else result = result + getPart(temp2) + "万"; if(Integer.valueOf(temp1) != 0) { if(Integer.valueOf(temp2) != 0 && Integer.valueOf(temp1) < 1000) result = result + A[0]; result = result + getPart(temp1); } } else if(len >= 5 && len < 9) { String temp1 = temp.substring(len - 4, len); String temp2 = temp.substring(0, len - 4); result = result + getPart(temp2) + "万"; if(Integer.valueOf(temp1) != 0) { if(Integer.valueOf(temp1) < 1000) result = result + A[0]; result = result + getPart(temp1); } } else if(len > 0 && len < 5) { result = result + getPart(temp); } System.out.println(result); return; } public static void main(String[] args) { Main test = new Main(); Scanner in = new Scanner(System.in); int n = in.nextInt(); test.getResult(n); } }