【华为OD机试】1038 - 学英语

news2025/1/27 12:37:31

文章目录

    • 一、题目
      • 🔸题目描述
      • 🔸输入输出
      • 🔸样例1
    • 二、代码参考
  • 作者:KJ.JK


🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈
 
🍂个人博客首页: KJ.JK
 
💖系列专栏:华为OD机试(Java&Python&C语言)

一、题目


🔸题目描述

Jessi初学英语,为了快速读出一串数字,编写程序将数字转换成英文:
具体规则如下:
1.在英语读法中三位数字看成一整体,后面再加一个计数单位。从最右边往左数,三位一单位,例如12,345 等
2.每三位数后记得带上计数单位 分别是thousand, million, billion.
3.公式:百万以下千以上的数 X thousand X, 10亿以下百万以上的数:X million X thousand X, 10 亿以上的数:X billion X million X thousand X. 每个X分别代表三位数或两位数或一位数。
4.在英式英语中百位数和十位数之间要加and,美式英语中则会省略,我们这个题目采用加上and,百分位为零的话,这道题目我们省略and
 
下面再看几个数字例句:
22: twenty two
100: one hundred
145: one hundred and forty five
1,234: one thousand two hundred and thirty four
8,088: eight thousand (and) eighty eight (注:这个and可加可不加,这个题目我们选择不加)
486,669: four hundred and eighty six thousand six hundred and sixty nine
1,652,510: one million six hundred and fifty two thousand five hundred and ten
 
说明:
数字为正整数,不考虑小数,转化结果为英文小写;
保证输入的数据合法
关键字提示:and,billion,million,thousand,hundred


🔸输入输出

输入
输入一个long型整数
 
输出
输出相应的英文写法


🔸样例1

输入
22


输出
twenty two

二、代码参考


/*
小于20的直接读数,如果个位和十位是0,则不需要读数(正百的100,例:one hundred);
如果有百位读取百位,
如果个位和十位是0,则不需要加and,否则需要加and,加hubdred,加百位 2、大于20的,依次添加个位,十位,百位;
添加百位的时候,先加and,加hundred,加百位
*/
import java.util.*;
public class Main {
     public static void main(String[] args){
         Scanner in = new Scanner(System.in);
         String[] NUMS = {"zero", "one", "two", "three", "four", "five", "six", "seven",
                         "eight", "nine", "ten", "eleven", "twelve", "thirteen", "fourteen",
                         "fifteen", "sixteen", "seventeen", "eighteen", "nineteen", "twenty"};
         String[] NUMSSHI = {"zero", "ten", "twenty", "thirty", "forty", "fifty",
                            "sixty", "seventy", "eighty", "ninety"};
         String[] POWER = {"", "hundred", "thousand", "million", "billion"};
         while(in.hasNext()){
             String line = in.nextLine();
             StringBuilder sb = new StringBuilder();
             ArrayList<String> lists = new ArrayList<>();
             if(!line.matches("\\d+")){//如果匹配的不是数字
                 System.out.println("error");
             }
             int linenum = Integer.parseInt(line);
             int power = 1;//单位
             while(linenum != 0){
                 if(power != 1){
                     lists.add(POWER[power]);//添加单位
                 }
                 int t = linenum % 1000;//取低三位
                 //注意小于20,直接读
                 if(t % 100 <= 20){
                     if(t % 100 != 0){//十位和个位是零的话就不需要读数了
                         lists.add(NUMS[t % 100]);
                     }
                     if(t / 100 != 0){//有百位
                         if(t % 100 != 0){//十位和个位是零的话就不需要添加and了
                             lists.add("and");
                         }
                         lists.add("hundred");
                         lists.add(NUMS[t / 100]);
                     }
                 }else{//大于20
                     // 有个位
                     if(t % 10 != 0){
                         lists.add(NUMS[t % 10]);
                     }
                     t /= 10;
                     // 有十位
                     if(t % 10 != 0){
                         lists.add(NUMSSHI[t % 10]);
                     }
                     t /= 10;
                     // 有百位
                     if(t % 10 != 0){
                         lists.add("and");
                         lists.add("hundred");
                         lists.add(NUMS[t % 10]);
                     }
                 }
                 linenum /= 1000;//每次缩小1000倍
                 power++;//单位*1000
             }
             //添加的时候,先添加低位,读数的时候先读高位,倒着读
             for(int i = lists.size() - 1; i >= 0; i--){
                 if(i!=0){
                     sb.append(lists.get(i) + " ");
                 }else{
                     sb.append(lists.get(i));//最后一个不加空格
                 }
             }
             System.out.println(sb.toString());
         }
     }   
}



--------------------------------------------------------


num1 = ['zero','one','two','three','four','five','six',
       'seven','eight','nine','ten','eleven','twelve',
       'thirteen','fourteen','fifteen','sixteen',
       'seventeen','eighteen','nineteen']
num2 = [0,0,'twenty','thirty','forty','fifty','sixty',
       'seventy','eighty','ninety']

# 100以内转英文
def n2w(n):
    if n > 0:
        if n < 20:
            word.append(num1[n])
        else:
            word.append(num2[n//10])
            if n%10 != 0:
                word.append(num1[n%10])

# 1000以内转英文
def hun(n):
    if n >= 100:
        word.append(num1[n//100])
        word.append('hundred')
        if n % 100 != 0:
            word.append('and')
    n2w(n%100)

while True:
    try:
        n = int(input())
    except:
        break
    else:
        word = []
        a = n % 1000  # 个十百位
        b = (n//1000) % 1000  # 个十百千
        c = (n//1000000) % 1000  #个十百m
        d = n // 1000000000    # 个十百b
        
        if d > 0:
            hun(d)
            word.append('billion')
        if c > 0 :
            hun(c)
            word.append('million')
        if b > 0:
            hun(b)
            word.append('thousand')
        if a > 0 :
            hun(a)
        print(' '.join(word))



--------------------------------------------------------------


#include<stdio.h>


int main(){
    int in;
    char s2[10][10] = {"zero", "one", "two", "three", "four","five", "six", "seven", "eight", "nine"};
    char s1[10][10] = {"ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen",
                                      "sixteen", "seventeen", "eighteen", "nineteen"};
    char s0[10][10] = {"ten", "twenty", "thirty", "forty", "fifty",
                                    "sixty", "seventy", "eighty", "ninety"};
    scanf("%d",&in);
    int m[9];
    int k=8;
    while(k>=0){
        m[k] = in%10;
        in = in/10;
        k--;
    }
    
    int f_and = 0;
    for(int i=0;i<3;i++){
        int sum = 0;
        for(int j=0;j<3;j++){
            int idx = i*3+j;
            sum += m[idx];
            if(m[idx]!=0){
                if(j==0){
                    printf("%s hundred ",s2[m[idx]]);
                    f_and = 1;
                }
                else if(j==1){
                     if(f_and==1){
                         printf("and ");
                         f_and = 0;
                     }
                    if(m[idx]>1) //输出>=20的整10数
                         printf("%s ",s0[m[idx]-1]);
                    else if(m[idx]==1 && m[idx+1]==0){  // ten
                        printf("ten ");
                    }
                }
                else{
                    if(f_and==1){
                         printf("and ");
                         f_and = 0;
                     }
                    if(m[idx-1]==1){
                        printf("%s ",s1[m[idx]]);
                    }
                    else{
                        printf("%s ",s2[m[idx]]);
                    }
                }
                
            }
            
        }
        if(sum!=0){
            if(i==0)
                printf("million ");
            else if(i==1)
                printf("thousand ");
        }
    }
}
  




请添加图片描述


作者:KJ.JK

文章对你有所帮助的话,欢迎给个赞或者 star,你的支持是对作者最大的鼓励,不足之处可以在评论区多多指正,交流学习

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/413516.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于价值认同的需求侧电能共享分布式交易策略(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

惊喜开箱!品牌可以从 Ledger 引领的顶级体验之一中学到什么?

Ledger 是加密货币硬件钱包的领先供应商&#xff0c;它通过进入 The Sandbox 并创建游戏化体验来扩大其教育计划&#xff0c;从而在虚拟世界中掀起波澜。通过在这个令人兴奋的新空间打造自己的品牌&#xff0c;Ledger 正在接触更广泛的受众&#xff0c;并以有趣的方式与人们互动…

回收站清空了怎么恢复?快来get实用方法!

案例&#xff1a;回收站清空了怎么恢复&#xff1f; 【真的栓Q了&#xff0c;我刚点击回收站&#xff0c;不知道按错了什么&#xff0c;回收站被清空了&#xff0c;大家有什么方法可以恢复回收站里的文件吗&#xff1f;请大家给我出出主意吧&#xff01;谢谢啦&#xff01;】 …

不愧是比亚迪!

最近这段时间&#xff0c;因为我自己准备买车嘛&#xff0c;然后先后去试驾了比亚迪汉、小鹏P7i、蔚来ET5、智己LS7这几辆车&#xff0c;接下来想分4篇文章依次给大家分享一下这四个品牌的车试驾体验。比亚迪汉小鹏P7i蔚来ET5这四个品牌总共花了三天时间&#xff0c;也算是比较…

STC89C52定时器的简介

一、序言 针对于STC89C52RC而言&#xff0c;这个芯片内部包含了三个定时器——T0、T1和T2&#xff0c;他们的中断优先级分别是1、3和5。 怎么还有一个定时器2呢&#xff1f;博主也是今天整理这篇博客的时候&#xff0c;翻阅芯片手册才发现的。如果说&#xff0c;我们经常用的…

00后面试华为软件测试工程师,竭尽全力拿到15K。。。。。

不废话&#xff0c;直接重点 一般软件测试的面试分为三轮&#xff1a;笔试&#xff0c;HR面试&#xff0c;技术面试。 前两轮&#xff0c;根据不同企业&#xff0c;或有或无&#xff0c;但最后一个技术面试是企业了解你“行不行”的关键环节&#xff0c;每个企业都会有的。 在…

从C语言到C++(第一章_C++入门_中篇)缺省参数+函数重载+引用

目录 1.缺省参数 1.1缺省参数概念 1.2缺省参数的使用&#xff1a; 1.3缺省参数的分类 1.3.1 全缺省参数 1.3.2 半缺省参数 1.4缺省参数的应用场景 2. 函数重载 2.1函数重载的概念 2.2不支持函数重载的情况 3.引用 3.1引用的概念 3.2引用的特性 3.3引用做参数 3…

C++内存管理(new和delete)

目录 1. new/delete操作内置类型 2. new和delete操作自定义类型 3. operator new与operator delete函数 4 .new和delete的实现原理 1 .内置类型 2 .自定义类型 new的原理 delete的原理 new T[N]的原理 delete[]的原理 5. 定位new表达式(placement-new) 6. malloc/f…

【JavaScript】原生js实现省市区联动效果

&#x1f609;博主&#xff1a;初映CY的前说(前端领域) ,&#x1f4d2;本文核心&#xff1a;用原生js实现省市区联动 【前言】今日在复习省市县三级联动的时候&#xff0c;有点忘了原生的js应该怎么样处理省市县的联动&#xff0c;特此写下来再次复习下 目录⭐实现思路⭐思路转…

Node【六】内置模块 【url模块与queryString】

文章目录&#x1f31f;前言&#x1f31f;url 模块&#x1f31f; URL各部分说明&#x1f31f; 将URL字符串转换为对象&#x1f31f; 将对象格式化为URL字符串&#xff1a;url.format(urlObj)&#x1f31f; URL路径处理&#xff1a;url.resolve(from, to)&#x1f31f; queryStri…

Dapr和Rainbond集成,实现云原生BaaS和模块化微服务开发

背景 Dapr 是一个开源的分布式应用运行时&#xff0c;帮助开发者构建松耦合的分布式应用程序&#xff0c;具有良好的可扩展性和可维护性。Rainbond 是一款企业级的云原生应用管理平台&#xff0c;提供了丰富的功能和工具&#xff0c;方便开发者管理和部署应用。Rainbond 和 Da…

如何通过 kubernetes ingress 或者 istio ingressgateway 来暴露 TCP 的服务

点击上方“程序猿技术大咖”&#xff0c;关注并选择“设为星标”回复“加群”获取入群讨论资格&#xff01;在 kubernetes 或 istio 应用中&#xff0c;一般都是通过 kubernetes ingress 或者 istio ingressgateway 来暴露 HTTP/HTTPS 的服务。但是在实际应用中&#xff0c;还是…

纷享销客张睿:快消数字化新时代,数“智”引领新增长

4月6日&#xff0c;在2023年&#xff08;第八届&#xff09;中国快消品创新大会主论坛上&#xff0c;纷享销客经营副总裁兼快消行业部总经理张睿作为嘉宾出席&#xff0c;并以《快消数字化新时代&#xff0c;数“智”引领新增长》为题发表了演讲。他有20余年的市场营销、销售及…

【蓝桥杯省赛真题37】Scratch冰上滑行 少儿编程scratch编程蓝桥杯省赛比赛真题讲解

目录 scratch冰上滑行 一、题目要求 编程实现 二、案例分析 1、角色分析

JUC源码系列-ReentrantReadWriteLock

继承关系 ReadLock和WriteLock是ReentrantReadWriteLock的两个内部类&#xff0c;Lock的上锁和释放锁都是通过AQS来实现的。 AQS定义了独占模式的acquire()和release()方法&#xff0c;共享模式的acquireShared()和releaseShared()方法。 还定义了抽象方法tryAcquire()、tryA…

男生|女生漫画头像怎么制作,分享3种免费制作方法,不用求人

大家发现没有&#xff0c;最近特别流行卡通漫画头像&#xff01;一些小伙伴们通过处理自己的照片&#xff0c;把照片制作成漫画头像&#xff0c;让照片看起来更有趣。那么&#xff0c;男生、女生漫画头像怎么制作呢&#xff1f;需要用到哪些工具?今天给大家分享3种免费制作漫画…

数据结构之线性表3

我们的目标&#xff1a; 1、了解线性结构的特点 掌握顺序表的定义、查找、插入和删除。 2、掌握链表的定义、创建、查找、插入和删除。 3、能够从时间和空间复杂度的角度比较两种存储结构的不同特点及其适用场合。&#xff08;持续更新&#xff09; 前言 本章节内容主要介绍…

linux服务器怎么搭建网站

linux服务器怎么搭建网站 我是艾西&#xff0c;今天又是和想学习linux系统的小伙伴分享服务器系统操作小知识的时间。 这篇文章艾西会告诉大家怎么用linux系统搭建网站&#xff0c;网站是一个展示页面&#xff0c;用于商业的公告栏、门面以及用户容易记住的点&#xff0c;通过…

SpringSecurity中用户表单登录验证源码分析

SpringSecurity简单介绍 Spring Security所解决的问题就是安全访问控制&#xff0c;安全访问控制功能其实就是对所有进入系统的请求进行拦截&#xff0c;校验每个请求是否能够访问它所期望的资源。通过学习SpringMVC我们得知只有进入Controller的请求才会走拦截器(Interceptor)…

LOL自动走A和释放技能原理及安全防护

走A和自动释放技能并不什么变态功能&#xff0c;他的一切操作都是符合常理的&#xff0c; 但是在经过合理的逻辑代码编写后&#xff0c; 利用读取内存数据&#xff0c;快速执行和判断&#xff0c; 实现的功能却是超出大部分玩家的。 也就是说用这个功能&#xff0c;可以弥补…