HJ42 学英语

描述

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。

数据范围:1 \le n \le 2000000 \1n2000000 

本题含有多组输入数据。

输入描述:

输入多行long型整数

输出描述:

输出相应的英文写法

示例1

输入:
22
100
145
1234
8088
486669
1652510
复制
输出:
twenty two
one hundred
one hundred and forty five
one thousand two hundred and thirty four
eight thousand eighty eight
four hundred and eighty six thousand six hundred and sixty nine
one million six hundred and fifty two thousand five hundred and ten
shuzi=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,30,40,50,60,70,80,90]
english=["one","two","three","four","five","six","seven","eight","nine","ten","elven","twlve","thirteen","forteen","fifteen","sixteen","seventeen","eigtheen","ninteen","twenty","thirty","forty","fifty","sixty","seventy","eighty","ninety"]
def two_weido(n):
    n=int(n)
    ge=n % 10
    shi=n - ge
    if n in shuzi:
        print(english[shuzi.index(n)],end="")
    else:
        print(english[shuzi.index(shi)] , english[shuzi.index(ge)],end="")
        
def three_weido(n):
    n=int(n)
    bai=n//100
    two_wei=n%100
    and_fu=" "   
    if two_wei>=1:
        and_fu=" and "
    if two_wei==0:
        print(english[shuzi.index(bai)]+" hundred",end="")
    elif bai in shuzi:
        print(english[shuzi.index(bai)]+" hundred"+and_fu,end="")
        two_weido(two_wei)
    elif bai==0:
        two_weido(two_wei)

def four_weido(n):
    n=int(n)
    qian=n//1000
    bai_shi_ge=n%1000
    if qian in shuzi:
        print(english[shuzi.index(qian)]+" thousand ",end="")
        three_weido(bai_shi_ge)
def five_weido(n):
    n=int(n)
    wan_qian=n//1000
    bai_shi_ge=n%1000
    if wan_qian in shuzi:
        print(english[shuzi.index(wan_qian)]+" thousand ",end="")
        three_weido(bai_shi_ge)
    else:
        wan_qian_2wei=wan_qian-wan_qian%10
        print(english[shuzi.index(wan_qian_2wei)] , english[shuzi.index(wan_qian%10)]+" thousand ",end="")
        three_weido(bai_shi_ge)
def six_weido(n):
    n=int(n)
    bai_shi_ge_qian=n//1000
    bai_shi_ge=n%1000
    three_weido(bai_shi_ge_qian)
    print(" thousand ",end="")
    three_weido(bai_shi_ge)
def seven_weido(n):
    n=int(n)
    baiwan=n//1000000
    if baiwan in shuzi:
        print(english[shuzi.index(baiwan)]+" million ",end="")
        bai_6=n%1000000
        six_weido(bai_6)
while True:
    try:
        n=input()
        if len(n) ==1:
            print(english[shuzi.index(n)])
        elif len(n) ==2:
            two_weido(n)
        elif len(n) ==3:
            three_weido(n)
        elif len(n)==4:
            four_weido(n)
        elif len(n)==5:
            five_weido(n)
        elif len(n)==6:
            six_weido(n)
        elif len(n)==7:
            seven_weido(n)
        print("") 
    except:
        break

全部评论

相关推荐

上周组里招人,我面了六个候选人,回来跟同事吃饭的时候聊起一个让我挺感慨的现象。前三个候选人,算法题写得都不错。第一道二分查找,五分钟之内给出解法,边界条件也处理得干净。第二道动态规划,状态转移方程写对了,空间复杂度也优化了一版。我翻他们的简历,力扣刷题量都在300以上。后三个呢,就有点参差不齐了。有的边界条件没处理好,有的直接说这道题没刷过能不能换个思路讲讲。其中有一个女生,我印象特别深——她拿到题之后没有马上写,而是先问我:“面试官,我能先跟你确认一下我对题目的理解吗?”然后她把自己的思路讲了一遍,虽然最后代码写得不是最优解,但整个沟通过程非常顺畅。这个女生的代码不是最优的,但当我问她“如果这里是线上环境,你会怎么设计’的时候,她给我讲了一套完整的方案——异常怎么处理、日志怎么打、怎么平滑发布。她对这是之前在实习的时候踩过的坑。”我在想LeetCode到底在筛选什么?我自己的经历可能有点代表性。我当年校招的时候,也是刷了三百多道题才敢去面试。那时候大家都刷,你不刷就过不了笔试关。后来工作了,前三年基本没再打开过力扣。真正干活的时候,没人让你写反转链表,也没人让你手撕红黑树。更多的是:这个接口为什么慢了、那个服务为什么OOM了、线上数据对不上了得排查一下。所以后来我当面试官,慢慢调整了自己的评判标准。算法题我还会出,但目的变了。我出算法题,不是想看你能不能背出最优解。而是想看你拿到一个陌生问题的时候,是怎么思考的。你会先理清题意吗?你会主动问边界条件吗?你想不出来的时候会怎么办?你写出来的代码,变量命名乱不乱、结构清不清楚?这些才是工作中真正用得到的能力。LeetCode是一个工具,不是目的。它帮你熟悉数据结构和常见算法思路,这没问题。但如果你刷了三百道题,却说不清楚自己的项目解决了什么问题、遇到了什么困难、你是怎么解决的,那这三百道题可能真的白刷了。所以还要不要刷LeetCode?要刷,但别只刷题。刷题的时候,多问自己几个为什么:为什么用这个数据结构?为什么这个解法比那个好?如果换个条件,解法还成立吗?把刷题当成锻炼思维的方式,而不是背答案的任务。毕竟面试官想看到的,从来不是一台背题机器,而是一个能解决问题的人。
国企上岸了的向宇同桌...:最害怕答非所问了,但是频繁反问确定意思又害怕面试官觉得我笨
AI时代还有必要刷lee...
点赞 评论 收藏
分享
03-17 23:54
黑龙江大学 Java
来个白菜也好啊qaq:可以的,大厂有的缺打手
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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