算法Day10 智能翻译

智能翻译

Description

某银行为了提高账户金额的可读性,需要将非负整数num转换为其对应的英文表示。

Input

输入数据的格式为: 数字num。(0≤num≤1000000000)

Output

输出的数据为数字的英文表示,英文表示不需要加and,不需要加"-",单词之间用空格隔开,如:One Hundred Twenty Three

Sample

在这里插入图片描述

代码

import java.util.ArrayList;
import java.util.Scanner;

public class Main {
    public static String s1[] = new String[]{"Zero", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine"};
    public static String s2[] = new String[]{"Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen"};
    public static String s3[] = new String[]{"Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety"};

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String s = scanner.nextLine();
        int n = Integer.valueOf(s);

        if(n==1000000000){System.out.println("One Billion");return;}
        if(n==0){System.out.println("Zero");return;}
        String newString = "";
        if(s.length()%3!=0) {
            for (int k = 0; k < 3 - s.length() % 3; k++) {
                newString += "0";
            }
        }
        newString+=s;
        String out = "";
        //3 2 1
        for(int i = newString.length()/3;i>=1;i--){
            int beginIndex = (newString.length() / 3 - i) * 3;
            String add = process(newString.substring(beginIndex,beginIndex+3));
            out+=add;
            if(i==3){
                out+=" Million";
            }else if(i==2&&(!add.equals(""))){
                out+=" Thousand";
            }
        }
        System.out.print(out.substring(1));
    }
    //三个数字处理
    public static String process(String s){
        if(s.equals("000")){
            return "";
        }
        String c1 = String.valueOf(s.charAt(0));
        String c2 = String.valueOf(s.charAt(1));
        String c3 = String.valueOf(s.charAt(2));
        String process1 = "";
        if(c1.equals("0"));
        else process1+= " "+s1[Integer.parseInt(c1)]+" Hundred";
        if(c2.equals("0")){
            process1+=(c3.equals("0")?"":" "+s1[Integer.parseInt(c3)]);
        }else if(c2.equals("1")){
            process1+=" "+s2[Integer.parseInt(c2+c3)-10];
        }else {
            process1+=" "+s3[Integer.parseInt(c2)-2]+(c3.equals("0")?"":" "+s1[Integer.parseInt(c3)]);
        }
        return process1;
    }

}

思路

本题需要建立字符串数组保存信息,将字符串增补到长度为3的倍数;
同时需要考虑比如1000000,100000001,0等特殊情况;
oj写了半天才通过,小学知识忘完了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值