华为-学英语

(java实现)


问题描述:

题目描述
Jessi初学英语,为了快速读出一串数字,编写程序将数字转换成英文:

如22:twenty two,123:one hundred and twenty three。
说明:
数字为正整数,长度不超过九位,不考虑小数,转化结果为英文小写;
输出格式为twenty two;
非法数据请返回“error”;
关键字提示:and,billion,million,thousand,hundred。
本题含有多组输入数据。
输入描述:
输入一个long型整数
输出描述:
输出相应的英文写法
示例1

输入

2356

输出

two thousand three hundred and fifty six

问题分析:

算法实现:

参考代码:

import java.util.*;
public class Main {
    //个位数
    public static String[] num1 = {"zero","one","two","three","four","five","six","seven","eight","nine"};
    //十位数
    public static String[] num2 = {"twenty","thirty","forty","fifty","sixty","seventy","eighty","ninety"};
    //11-19
    public static String[] num3 = {"ten","eleven","twelve","thirteen","fourteen","fifteen","sixteen","seventeen","eighteen","nineteen"};
    
    public static void main(String[] args)
    {
        Scanner input = new Scanner(System.in);
        while (input.hasNext())
        {
            long num = input.nextLong();
            System.out.println(parse(num));
        }
        input.close();
    }
    
    public static String parse(long num)
    {
        if (num<0)
            return "error";
        StringBuilder res = new StringBuilder();
        long billion = num/1000000000;    //处理亿万
        if (billion != 0)
        {
            res.append(trans(billion) + " billion ");
        }
        num %= 1000000000;
        long million = num/1000000;        //处理百万
        if (million != 0)
        {
            res.append(trans(million) + " million ");
        }
        num %= 1000000;
        long thousand = num/1000;        //处理千
        if (thousand != 0)
        {
            res.append(trans(thousand) + " thousand ");
        }
        num %= 1000;    //处理剩下1000
        if (num != 0)
        {
            res.append(trans(num));
        }
        return res.toString().trim();   //去掉尾部空格
    }
    
    public static String trans(long num)
    {
        StringBuilder res = new StringBuilder();
        long h = num/100;
        if(h != 0)
        {
            res.append(num1[(int)h] + " hundred ");
        }
        num %= 100;
        if (h != 0)
        {
            res.append("and ");    //百位不为0
        }
        if (num>=20)
        {
            //处理十位
            res.append(num2[(int)num/10-2]);
            //处理个位
            if (num%10 != 0)
            {
                res.append(" "+ num1[(int)num%10]);
            }
        }else if(num>=10 && num<20)
        {
            res.append(num3[(int)num-10]);
        }else
        {
            res.append(num1[(int)num]);
        }
        return res.toString().trim();   //去掉尾部空格
    }
}












全部评论

相关推荐

01-12 17:45
门头沟学院 Java
985废物一枚:就是问问你能不能接受北京的房租,hr也知道公司工资不高,大概率是要贴钱的
找实习记录
点赞 评论 收藏
分享
2025-12-31 19:23
已编辑
门头沟学院 Java
ssob是已读不回的,字节是压根不敢投的,简历是反反复复改了N遍的,八股是永远背不完的😅😅😅扯远了,道心破碎了,把简历发出来让大伙先看看笑话。再说正事。寒假日常实习还是很难找,连个面试都难约,我不是个例,这是网上普遍反映。不报希望了,趁着2、3月前赶紧做些什么才是。扔几个碎碎念:1.这破简历还能怎么改?写到什么程度才能过实习岗筛选?广大牛友来锐评一下2.火速辅修go,是否可行目前看来是学习成本最小的。首先,很多go实习岗位已经明确要求掌握gin等技术栈,拿java简历投go的时代已经过去了。其次,很多后端的东西,MySQL、Redis这些都是通用的,不用重新学。所以这个问题就具体为:2.1&nbsp;java&amp;go混血简历怎么写第一个项目,仿大麦的微服务,不太好改。因为有用到Redisson、AOP、SpringAI这些java强相关的东西,包装成go需要替换这些方案。第二个,点评魔改。应该可以包装成go,github上也有人用go重写过。2.2&nbsp;java&amp;go通用的轮子RPC直接pass了,太烂大街了。不知道动态线程池能不能做。反正项目上新有风险,不一定来得及,非必要就不开新的项目。补充:别跟我扯RAG了,这玩意已经成新的烂大街了,详见我上一篇的吐槽。3.认真学微调prompt什么的这个半步踩进算法了已经。八股和场景题完全就是另一套,没两三个月搞不定的。约等于换方向
简历中的项目经历要怎么写
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务