package com.zh.test; /* 在与财务相关的应用中,经常会用到人民币金额的大写,比如发票的打印程序。 本题的任务是:从键盘输入一个十亿以内的正整数(int类型),把它转换为人民币金额大写(不考虑用户输入错误的情况)。 比如,用户输入:35201,程序输出:叁万伍仟贰佰零壹 用户输入:30201,程序输出:叁万零贰佰零壹 用户输入:30001,程序输出:叁万零壹 用户输入:31000,程序输出:叁万壹仟 用户输入:120023201,程序输出:壹亿贰仟零贰万叁仟贰佰零壹 用户输入:120020001,程序输出:壹亿贰仟零贰万零壹 用户输入:100000001,程序输出:壹亿零壹 可以看到,在万后满千位,则不加零,否则要补零,但不要出现类似“零零”的情况。 在亿后满千万位,则不加零,否则要补零,但整个“万档”没有数字时,“万”字省去。 */ import java.util.Scanner; public class Test15 { static char[] uper = {'零','壹','贰','叁','肆','伍','陆','柒','捌','玖'}; // 大写数字 static char[] unit = {' ','拾','佰','仟','万','拾','佰','仟','亿','拾','佰'}; // 单位 public static void main(String[] args){ Scanner scan = new Scanner(System.in); System.out.println("输入一个十亿以内的正整数(int类型)"); String s = scan.nextLine(); StringBuffer sb = new StringBuffer(); int num0 = 0; // 记录连续的零的个数 for(int i=s.length()-1;i>=0;i--){ if(s.charAt(i)!='0'){ sb.insert(0,unit[s.length()-1-i]); } if(s.length()-1-i==4){ sb.insert(0,'万'); } if(s.charAt(i)=='0'){ num0++; // 统计零的个数 }else{ num0 = 0; } if(num0<=1){ // 添加大字数字 sb.insert(0,uper[s.charAt(i)-'0']); } } if(sb.charAt(sb.length()-1)=='零'){ // 去掉最后的"零" sb.deleteCharAt(sb.length()-1); } String ss = sb.toString(); ss = ss.replace("零万", "万"); ss = ss.replace("亿万", "亿"); ss = ss.replace("万万", "万"); System.out.println(ss); } }