天地无极,乾坤剑法

导航

 

题目描述

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 }

 

posted on 2018-01-10 23:22  天地无极,乾坤剑法  阅读(195)  评论(0)    收藏  举报