学英语

描述
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的形式,出现了数组运行时越界异常,这是要注意的一个点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值