题目描述
Jessi初学英语,为了快速读出一串数字,编写程序将数字转换成英文:
如22:twenty two,123:one hundred and twenty three。
说明:
数字为正整数,长度不超过九位,不考虑小数,转化结果为英文小写;
输出格式为twenty two;
非法数据请返回“error”;
关键字提示:and,billion,million,thousand,hundred。
方法原型:public static String parse(long num)
输入描述:
输入一个long型整数
输出描述:
输出相应的英文写法
示例1
输入
2356
输出
two thousand three hundred and fifty six
代码如下:
1 package com.yzh.hehe; 2 3 import java.util.Scanner; 4 5 public class NumberToEnglish { 6 7 public static void main(String[] args) { 8 // TODO Auto-generated method stub 9 Scanner scanner=new Scanner(System.in); 10 while (scanner.hasNext()) { 11 long num=scanner.nextLong(); 12 System.out.println(parse(num)); 13 } 14 scanner.close(); 15 } 16 17 public static String parse(long num){ 18 String[] geweiArr={"one","two","three","four","five","six","seven","eight","nine" }; 19 String[] shiweiArr={"twenty","thirty","forty","fifty","sixty","seventy","eighty","ninety"}; 20 String[] shiduoArr={"ten","eleven","twelve","thirteen","fourteen","fifteen","sixteen","seventeen","eighteen","nineteen"}; 21 String numString=String.valueOf(num); 22 // 要求最多不超过九位数,不够九位的前面填0 23 for (int i = numString.length(); i <9; i++) { 24 numString="0"+numString; 25 } 26 StringBuilder stringBuilder=new StringBuilder(); 27 String million=numString.substring(0,3);//以1000(thousand)每三位为一个部分(个十百)来处理 28 int miBaiInt=Integer.parseInt(million.substring(0, 1)); 29 boolean flag=false;//判断是否加and的标志 30 //处理三位组成的数当中的百位 31 if (miBaiInt!=0) { 32 flag=true; 33 stringBuilder.append(geweiArr[miBaiInt-1]+" hundred"); 34 } 35 int miShiInt=Integer.parseInt(million.substring(1,2));//三位组成的数当中的十位 36 int migeInt=Integer.parseInt(million.substring(2));//三位组成的数当中的个位 37 if ((miShiInt!=0||migeInt!=0)&&flag) { 38 stringBuilder.append(" and "); 39 } 40 //十位为1时十位和个位可同时处理,否则,先处理十位,在处理个位 41 if (miShiInt==1) { 42 int temp=Integer.parseInt(million.substring(1));//十位个位同事处理 43 stringBuilder.append(shiduoArr[temp-10]); 44 } 45 //十位,个位分别处理 46 else { 47 flag=false; 48 if(miShiInt!=0){ 49 flag=true; 50 stringBuilder.append(shiweiArr[miShiInt-2]); 51 } 52 if (flag&&migeInt!=0) { 53 stringBuilder.append(" "+geweiArr[migeInt-1]); 54 }else if(migeInt!=0){ 55 stringBuilder.append(geweiArr[migeInt-1]); 56 } 57 58 } 59 int length=stringBuilder.length();//判断是否存在million和thousand 60 if (length!=0) { 61 stringBuilder.append(" million "); 62 } 63 String thousand=numString.substring(3,6);//处理第二个三位组成的部分 64 int thBaiInt=Integer.parseInt(thousand.substring(0,1)); 65 flag=false; 66 if (thBaiInt!=0) { 67 flag=true; 68 stringBuilder.append(geweiArr[thBaiInt-1]+" hundred"); 69 } 70 int thShiInt=Integer.parseInt(thousand.substring(1,2)); 71 int thGeInt=Integer.parseInt(thousand.substring(2)); 72 if (flag&&(thShiInt!=0||thGeInt!=0)) { 73 stringBuilder.append(" and "); 74 } 75 if (thShiInt==1) { 76 int temp=Integer.parseInt(thousand.substring(1)); 77 stringBuilder.append(shiduoArr[temp-10]); 78 }else { 79 flag=false; 80 if (thShiInt!=0) { 81 flag=true; 82 stringBuilder.append(shiweiArr[thShiInt-2]); 83 } 84 85 if (flag&&thGeInt!=0) { 86 stringBuilder.append(" "+geweiArr[thGeInt-1]); 87 }else if (thGeInt!=0) { 88 stringBuilder.append(geweiArr[thGeInt-1]); 89 } 90 } 91 92 if (stringBuilder.length()>length) { 93 stringBuilder.append(" thousand "); 94 } 95 String bsg=numString.substring(6);//处理第三个三位组成的部分 96 int bsgBaiInt=Integer.parseInt(bsg.substring(0,1)); 97 flag=false; 98 if (bsgBaiInt!=0) { 99 flag=true; 100 stringBuilder.append(geweiArr[bsgBaiInt-1]+" hundred"); 101 } 102 int bsgShiInt=Integer.parseInt(bsg.substring(1,2)); 103 int bsgGeInt=Integer.parseInt(bsg.substring(2)); 104 if (flag&&(bsgShiInt!=0||bsgGeInt!=0)) { 105 stringBuilder.append(" and "); 106 107 } 108 if (bsgShiInt==1) { 109 int temp=Integer.parseInt(bsg.substring(1)); 110 stringBuilder.append(shiduoArr[temp-10]); 111 }else { 112 flag=false; 113 if (bsgShiInt!=0) { 114 flag=true; 115 stringBuilder.append(shiweiArr[bsgShiInt-2]); 116 } 117 if (flag&&(bsgGeInt!=0)) { 118 stringBuilder.append(" "+geweiArr[bsgGeInt-1]); 119 }else if (bsgGeInt!=0) { 120 stringBuilder.append(geweiArr[bsgGeInt-1]); 121 } 122 } 123 return stringBuilder.toString(); 124 125 } 126 127 }
浙公网安备 33010602011771号