其他题目---数字的英文表达和中文表达
来源:互联网 发布:用ps做淘宝详情页 编辑:程序博客网 时间:2024/04/28 10:55
【题目】
给定一个32位整数n,写两个函数分别返回n的英文与中文表达字符串。
【基本思路】
该类型的题目通常是由小的,简单的场景出发,把复杂的事情拆解成简单的场景。
英文表达的实现。英文的表达是以三个数为一组的,所以只要能表达出1~999,然后将数字分解成十亿组,百万组,千组,1~999组,每组都用1~999表达再把组与组之间各自的表达字符串连接起来即可。如何实现1~999的表达?从简单场景出发,依次实现1~19,1~99,1~999即可。
需要注意的是负数要加一个前缀,n如果为最小负整数的时候要考虑取绝对值时会溢出的问题。
#python3.5def num1To19(num): if num < 1 or num > 19: return "" names = ["One","Two","Three","Four","Five","Six","Seven","Eight","Nine",\ "Ten","Eleven","Twelve","Thirteen","Fourteen","Fifteen",\ "Sixteen","Seventeen","Eighteen","Nineteen"] return names[num-1]def num1To99(num): if num < 1 or num > 99: return "" if num >= 1 and num <= 19: return num1To19(num) high = num // 10 tyNames = ["Twenty","Thirty","Forty","Fifty","Sixty","Seventy","Eighty","Ninety"] return tyNames[high-2] + " " + num1To19(num % 10)def num1To999(num): if num < 1 or num > 999: return "" if num >= 1 and num <= 99: return num1To99(num) return num1To19(num // 100) + " Hundred " + num1To99(num % 100)def getNumEngExp(num): if num == 0: return "Zero" res = "" if num < 0: res = "Negetive, " if num == -(1 << 31): #防止取绝对值时溢出 res += "Two Billion, " num %= -2000000000 num = abs(num) high = 1000000000 names = ["Billion","Million","Thousand",""] index = 0 while num != 0: cur = num // high num %= high if cur != 0: res += num1To999(cur) + " " + names[index] res += ", " if num != 0 else "" index += 1 high //= 1000 return res
中文表达的实现。与英文表达的处理过程类似,都是由小范围的数向大范围的数扩张。依次实现1~9,1~99,1~999,1~9999,1~99999999。需要注意的细节就是,16的表达为十六,116的表达为一百一十六,1016的表达是一千零一十六,也可以是一千零十六。这说明,对10~19来说,如果百位上有数字,那么就应该念一十几,如果百位没有数字,则应该念十几,所以在设计1~99函数的时候,要多考虑百位是否存在的因素。
def num1To9ByChinese(num): if num < 1 or num > 9: return "" names = ["一","二","三","四","五","六","七","八","九"] return names[num-1]def num1To99ByChinese(num, hasBai): if num < 1 or num > 99: return "" if num < 10: return num1To9ByChinese(num) shi = num // 10 if shi == 1 and not hasBai: return "十" + num1To9ByChinese(num % 10) else: return num1To9ByChinese(shi) + "十" + num1To9ByChinese(num % 10)def num1To999ByChinese(num): if num < 1 or num > 999: return "" if num < 100: return num1To99ByChinese(num, False) res = num1To9ByChinese(num // 100) + "百" rest = num % 100 if rest == 0: return res elif rest >= 10: res += num1To99ByChinese(rest, True) else: res += "零" + num1To9ByChinese(rest) return resdef num1To9999ByChinese(num): if num < 1 or num > 9999: return "" if num < 1000: return num1To999ByChinese(num) res = num1To9ByChinese(num // 1000) + "千" rest = num % 1000 if rest == 0: return res elif rest >= 100: res += num1To999ByChinese(rest) else: res += "零" + num1To99ByChinese(rest, False) return resdef num1To99999999ByChinese(num): if num < 1 or num > 99999999: return "" if num < 10000: return num1To9999ByChinese(num) wan = num // 10000 rest = num % 10000 res = num1To9999ByChinese(wan) + "万" if rest == 0: return res elif rest > 1000: res += num1To9999ByChinese(rest) else: res += "零" + num1To999ByChinese(rest) return resdef getNumChineseExp(num): if num == 0: return "零" res = "" if num < 0: res = "负" num = abs(num) yi = num // 100000000 rest = num % 100000000 if yi == 0: return res + num1To99999999ByChinese(rest) res += num1To99999999ByChinese(yi) + "亿" if rest == 0: return res elif rest > 10000000: return res + num1To99999999ByChinese(rest) else: return res + "零" + num1To99999999ByChinese(rest)
阅读全文
3 0
- 其他题目---数字的英文表达和中文表达
- 数字的英文表达(趣味题C#)
- 标点符号的英文表达
- python:将数字转换成用英文表达的程序
- “灌水”和“潜水”英文表达
- 常用符号的英文表达
- 中国小吃的英文表达
- 各种“假日”的英文表达
- “剩女”的英文表达
- 工作单位的英文表达
- 数学符号的英文表达
- 编程的标点 英文表达
- 100个常见的“公共标志和说明”英文表达
- 公共场所的标志和说明英文表达100例
- 表达数字的英文字母计数
- Java 数字价格转为中文大写表达
- 一个匹配数字和字母密码的正则表达…
- 数学运算符号的英文表达
- qt加载word
- Java学习笔记之static与this
- 通过分区和offset拉取Kafka的数据
- Windows的hosts文件在哪里?
- "makefile:5: *** missing separator. Stop."
- 其他题目---数字的英文表达和中文表达
- Xcode统计总行数
- java-struts2【学习备注】
- mysql在高并发下的主键冲突
- 代码优化
- docker volumes 文件映射
- 你会使用回调函数吗?
- 集合框架——接口
- c++使用sendinput函数实现模拟键盘按键操作