华为OJ——学英语

题目描述

  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

代码实现:

package cn.c_shuang.demo42;

import java.util.Scanner;
/**
 * 学英语
 * @author Cshuang
 *
 */
public class Main{

    public static String[] num1 = {"zero", "one", "two", "three", "four"
                        , "five", "six", "seven", "eight", "nine"};
    public static String[] num2 = {"ten","eleven","twelve","thirteen","fourteen"
                    ,"fifteen","sixteen","seventeen","eighteen","nineteen"};
    public static String[] num3 = {"twenty","thirty","forty","fifty"
                    ,"sixty","seventy","eighty","ninety"};

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        long num = 0;
        while(in.hasNext()){
            num = in.nextLong();
            System.out.println(parse(num));
        }
    }

    public static String parse(long num){
        if(num < 0 )
            return "error";
        StringBuilder sb = new StringBuilder();
        long billion = num / 1000000000;
        if(billion != 0){//十亿部分
            sb.append(thranslate(billion) + " billion ");//翻译十亿部分
        }
        num = num % 1000000000;
        long million = num / 1000000; //百万部分
        if(million != 0){
            sb.append(thranslate(million) + " million ");//翻译百万部分
        }
        num = num % 1000000;
        long thousand = num / 1000;//千部分
        if(thousand != 0){
            sb.append(thranslate(thousand) + " thousand ");//翻译千部分
        }
        num = num % 1000;//百部分
        if(num != 0){
            sb.append(thranslate(num));//翻译百部分
        }
        return sb.toString().trim();//别忘了去除字符串后面的空格
    }

    public static String thranslate(long num){
        StringBuilder sb = new StringBuilder();
        long h = num / 100;//百位处理
        if(h != 0){ //若不为0,翻译,否则不翻译
            sb.append(num1[(int) h] + " hundred");
        }
        num = num % 100;
        long k = num / 10; //十位部分
        if(k != 0){
            if(h != 0)//如果有百位别忘了加and
                sb.append(" and ");
            if(k == 1){//若十位为1,连同个位一起翻译
                long t = num % 10;
                sb.append(num2[(int)t]);
            }
            else{//否则,十位和个位分别单独翻译
                sb.append(num3[(int)k - 2] + " ");
                if(num % 10 != 0)
                    sb.append(num1[(int)(num % 10)]);
            }
        }
        else if(num % 10 != 0){//如果没有十位部分,直接翻译个位部分
            if(h != 0)
                sb.append(" and ");
            sb.append(num1[(int)(num % 10)]);
        }
        return sb.toString().trim();//去除字符串后面的空格
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值