题解 | #人民币转换#
人民币转换
https://www.nowcoder.com/practice/00ffd656b9604d1998e966d555005a4b
import java.util.ArrayList; import java.util.List; import java.util.Scanner; //分成小数点前后,依次对不同情况进行判断 // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { static String[] ss = {"", "万", "亿"}; static String[] ss1 = {"", "拾", "佰", "仟"}; static String[] ss2 = {"壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖", "拾"}; static String[] ss3 = {"元","角","分","零","整"}; public static void main(String[] args) { Scanner in = new Scanner(System.in); // 注意 hasNext 和 hasNextLine 的区别 while (in.hasNextLine()) { String money = in.nextLine(); int n = money.length(); String[] fenli = money.split("\\."); StringBuilder sb = new StringBuilder(); List<String> zhengshu = new ArrayList<>(); int index = 0; for(int i=fenli[0].length()-1 ; i>=0 ; i-=4){ StringBuilder temp = new StringBuilder(); for(int j=i-3<0?0:i-3 ; j<=i ; ++j){ temp.append(fenli[0].charAt(j)); } //System.out.println(temp.toString()); zhengshu.add(zhengshu(temp.toString())+ss[index++]); } sb.append("人民币"); for(int i=zhengshu.size()-1 ; i>=0 ; --i){ sb.append(zhengshu.get(i)); } if(!fenli[0].equals("0")){ //小数点前是否有数字 sb.append("元"); } if(fenli[1].equals("00")){ sb.append("整"); } else{ sb.append(fenshu(fenli[1])); } System.out.println(sb.toString()); } } public static String fenshu(String s){ StringBuilder sb = new StringBuilder(); int n = s.length(); if(s.equals("00")){ return ""; } for(int i=0 ; i<n ; ++i){ if(s.charAt(i) != '0'){ int a = Integer.valueOf(s.charAt(i)+""); sb.append(ss2[a-1]+ss3[i+1]); } } return sb.toString(); } public static String zhengshu(String s){ StringBuilder sb = new StringBuilder(); int n = s.length(); boolean flag = false;//判断中间是否有0 for(int i=0 ; i<n ; ++i){ boolean isZeros = true; //后续全为0的情况 for(int j=i ; j<n ; ++j){ if(s.charAt(j) != '0'){ isZeros = false; break; } } if(isZeros){ break; } if(!isZeros){ int a = Integer.valueOf(s.charAt(i)+""); if(a==0){ if(!flag){ sb.append("零"); } } else{ if(a==1 && i==n-2){ sb.append(ss1[n-i-1]);//跳过十位数上的一,即一十一变为十一 } //System.out.println((a-1)+" "+(n-i-1)); else{ sb.append(ss2[a-1]+ss1[n-i-1]); } } } } return sb.toString(); } }