学英语

来源:互联网 发布:淘宝销售团队 编辑:程序博客网 时间:2024/04/30 09:37

描述
Jessi初学英语,为了快速读出一串数字,编写程序将数字转换成英文:
如22:twenty two,123:one hundred and twenty three。
说明:
数字为正整数,长度不超过十位,不考虑小数,转化结果为英文小写;
输出格式为twenty two;
非法数据请返回“error”;
关键字提示:and,billion,million,thousand,hundred。
方法原型:public static String parse(long num)
知识点 字符串,循环,函数,指针,枚举,位运算,结构体,联合体,文件操作,递归
运行时间限制 10M
内存限制 128
输入
输入一个long型整数
输出
输出相应的英文写法
样例输入 2356
样例输出 two thousand three hundred and fifty six

package com.excavator;import java.util.Scanner;public class Main {    public static String TranslateNumber(long number) {        String[] s1= { "zero","one", "two", "three", "four", "five", "six", "seven", "eight", "nine","ten","eleven", "twelve", "thirteen", "fourteen","fifteen", "sixteen", "seventeen", "eighteen", "nineteen" };        String[] s3 = { "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety" };        String s=new String();        if (number<0L|number>9999999999L) {            s="error";        }else if (number<20) {  //number在0~19            s=s1[(int)number];        }        else if (number<100) {  //number 20,30,40,...90            if (number%10==0) {                s=s3[(int)number/10-2];            }else {                s=TranslateNumber(number/10*10)+" "+TranslateNumber(number%10);            }                   }else if (number<1000) {    //100~999              if (number%100==0) {                s=TranslateNumber(number/100)+" hundred";            }else {                s=TranslateNumber(number/100)+" hundred and "+TranslateNumber(number%100);            }        }else if (number<1000000) { //1000~999999            if (number%1000L==0) {                s=TranslateNumber(number/1000L)+" thousand";            }else {                s=TranslateNumber(number/1000L)+" thousand "+TranslateNumber(number%1000L);            }        }else if (number<1000000000L) { //10亿以下            if (number%1000000L==0) {                s=TranslateNumber(number/1000000L)+" million";            }else {                s=TranslateNumber(number/1000000L)+" million "+TranslateNumber(number%1000000L);            }        }else if (number<=9999999999L) {    //10亿到99亿            if (number%1000000000L==0) {                s=TranslateNumber(number/1000000000L)+" billion";            }else {                s=TranslateNumber(number/1000000000L)+" billion "+TranslateNumber(number%1000000000L);            }        }        return s;    }    public static void main(String[] args) {        // TODO Auto-generated method stub        Scanner scanner=new Scanner(System.in);        long num=scanner.nextLong();        String str=TranslateNumber(num);        System.out.println(str);        scanner.close();    }}

注意:
此处提倡用string数组来获得数字对应的英文单词,而不提倡用swit case语句,代码行数会非常多,可读性比较差,在答案正确之前我用的是多个if语句,而不是if else if的形式,出现了数组运行时越界异常,这是要注意的一个点。

0 0