Mr.K 018 发布于四月 29, 2020 分享 发布于四月 29, 2020 · 只看该作者 今天呢,今天决定来一道丧心病狂的题目! 来看题: 第17期. 这不是一个丧心病狂的题目 题目描述: 输入中每行以十进制形式给出一个整数N (),输出该数字在英文中的表达。 英文中数字的表达遵循如下规则: 1.0-19分别直接以如下的单词进行表达: { "zero","one","two","three", "four","five","six","seven", "eight","nine","ten","eleven", "twelve","thirteen","fourteen","fifteen", "sixteen","seventeen","eighteen","nineteen" }; 2.20-99,用一个单词或两个单词连接进行表达。若能被10整除则直接用一个单词进行表达: { "twenty","thirty","forty","fifty", "sixty","seventy","eighty","ninety" }; 若不能被10整除,则将十位和个位用连字符连接。如23在英文中的表达为"twenty-three"。 3. 100-999,先表示百位,再表示十位和个位,并以and连接。如123在英文中的表达为"one hundred and twenty-three" 4.对于不小于1000的数字,从右向左,每三位将数字划分一次。对于每一部分,先直接表示,然后加上对应的单位。如果一部分的三个数字都是0则直接省略。如12,345在英文中的表达为"twelve thousand three hundred and forty-five" 从高位到低位,每部分的单位分别为 { "billion",//10^9 "million",//10^6 "thousand",//10^3 ""//1, needs to add nothing }; 输入: 多组用例,以EOF结束。每行以十进制形式给出一个整数N () 输出: 对于每个输入的整数,输出一行,为该数字在英文中的表达。 输出中不允许开头,结尾或单词之间出现任何多余的空格(' ')或连字符('-')。 召唤阵: @yhz012 @inuisanaa @ZERC @随性而为 @NianRuoshui @摸鱼奇才咖啡喵 注释 摸鱼奇才咖啡喵 201.00节操 2 链接到点评
yhz012 发布于四月 29, 2020 分享 发布于四月 29, 2020 (已修改) · 只看该作者 (直球辱骂) 让我回忆起了洗数据的痛苦,这题绝对超丧心病狂,因为英语的各种不规则变形真的超智障 居然还不许有多余空格……边界条件怕是要判定疯了 思路其实很清晰,就是边界条件会比较恶心 给定数字n,首先 a, b = n / 1e9, n % 1e9 然后a的部分如果非0就调用toStr把这个三位数变成字符串,然后增加billion(空格),否则直接进入下一步 继续c, d = b / 1e6, b % 1e6, 同样的如果c非0就toStr带走,并增加million(空格),否则直接进入下一步 e, f = d / 1e3, d % 1e3, 同样,e非0就toStr,增加thousand(空格),否则直接下一步 接着就是天杀的toStr部分了,给定不超过3位数n a, b = n / 1e2, n % 1e2 如果a不为0,直接写个字典map到对应的英文(带空格)就好,然后增加hundred(空格),并判断b是否为0,。如果b不为0,增加个 and(空格)。否则直接结束 如果a为0,直接进入下一步。 给定两位数b,继续 c, d = b / 1e1, b % 1e1 如果c至少是2,那么输出对应的十位英文,map一下,并判断d是否为0。如果d不为0,增加个-。否则直接结束 如果c是1,那么根据d输出对应的英文(并带空格),还是map一下的事情 如果c是0,直接进入下一步 如果d非零,根据d输出对应各英文(带空格) 最后删除末位空格 四月 29, 2020,由yhz012修改 注释 Mr.K 018 20.00节操 可以的可以的 链接到点评
推荐贴