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