文章目录

  • 整型数字的英文表达和中文表达
    • 有符号32位整数的英文表达和中文表达
    • 算法思路
    • 相应代码

整型数字的英文表达和中文表达

有符号32位整数的英文表达和中文表达

【题目】
给定一个整型数字(32位)num,写两个函数分别返回num的英文与中文表达字符串。

num=0
英文表达字符串为:Zero
中文表达字符串为:零

num=319
英文表达字符串为:Three Hundred Nineteen
中文表达字符串为:三百一十九

num=1014
英文表达字符串为:One Thousand, Fourteen
中文表达字符串为:一千零十四

num=-2147483648
英文表达字符串为:Negative, Two Billion, One Hundred Forty Seven Million, Four Hundred Eighty Three Thousand, Six Hundred Forty Eight
中文表达字符串为:负二十一亿四千七百四十八万三千六百四十八

算法思路

查看业务逻辑能力,将阿拉伯数字以英文和中文表达显示。
32位整数范围为 −231∼231−1-2^{31} \sim 2^{31} - 1−231∼231−1
英文表达以三个数字为一组,依次为Billion, Million, Thousand,三个数字内对应1∼9991 \sim 9991∼999,1~19,20,30,40,50,60,70,80,90有特定英文单词,其余由前面特定的英文单词拼接;
中文表达以四个数字为一组,依次为亿, 万,四个数字内对应1∼99991 \sim 99991∼9999,依次为千,百,十,个位为一、二、三、四、五、六、七、八、九,为每个单位的数值表示;

注意
对0的特殊处理;
负数统一转换为正数处理,前面加负数表示;
java中用int表示32位整数,−231-2^{31}−231绝对值会超出数的表示范围,而python是动态语言,不存在这个问题。我实现时逻辑模拟java解决这个问题,以数字的英文表达为例。

# 逻辑上规避最小值-2**31,有关数据的存储空间及表达范围
if num == -2**31:res += "Two Billion, "num %= -2 * 10 ** 9

相应代码

# 英文表达1~19
def eng_express_1_to_19(num):if num < 1 or num > 19:return ""eng_numbers = ["One ", "Two ", "Three ", "Four ", "Five ", "Six ", "Seven ", "Eight ","Nine ", "Ten ", "Eleven ", "Twelve ", "Thirteen ", "Fourteen ","Fifteen ", "Sixteen ", "Seventeen ", "Eighteen ", "Nineteen "]return eng_numbers[num - 1]# 英文表达1~99
def eng_express_1_to_99(num):if num < 1 or num > 99:return ""if num < 20:return eng_express_1_to_19(num)else:eng_numbers = ["Twenty ", "Thirty ", "Forty ", "Fifty ", "Sixty ", "Seventy ", "Eighty ", "Ninety "]ten_coef = num // 10one_coef = num % 10res = eng_numbers[ten_coef - 2]if num != 0:res += eng_express_1_to_19(one_coef)return res# 英文表达1~999
def eng_express_1_to_999(num):if num < 1 or num > 999:return ""res = ""hund_coef = num // 100if hund_coef != 0:res += eng_express_1_to_19(hund_coef) + "Hundred "res += eng_express_1_to_99(num % 100)return res# 英文表达32位整数
def eng_express_num(num):# 32位整数范围外if num >= 2 ** 31 or num < - 2 ** 31:return ""if num == 0:return "Zero"res = ""if num < 0:res += "Negative, "# 逻辑上规避最小值-2**31,有关数据的存储空间及表达范围if num == -2**31:res += "Two Billion, "num %= -2 * 10 ** 9num = abs(num)print(num)bill_coef = num // (10 ** 9)num = num % 10 ** 9if bill_coef != 0:res += eng_express_1_to_999(bill_coef) + "Billion, "mill_coef = num // (10 ** 6)num = num % 10 ** 6if mill_coef != 0:res += eng_express_1_to_999(mill_coef) + "Million, "thou_coef = num // (10 ** 3)num = num % 10 ** 3if thou_coef != 0:res += eng_express_1_to_999(thou_coef) + "Thousand, "res += eng_express_1_to_999(num)return resdef chi_express_1_to_9(num):if num < 1 or num > 9:return ""chi_numbers = ['一', '二', '三', '四', '五', '六', '七', '八', '九']return chi_numbers[num - 1]def chi_express_1_to_9999(num):if num < 1 or num > 9999:return ""res = ""thou_coef = num // 1000num = num % 1000if thou_coef != 0:res += chi_express_1_to_9(thou_coef) + "千"hund_coef = num // 100num = num % 100if hund_coef != 0:res += chi_express_1_to_9(hund_coef) + "百"ten_coef = num // 10num = num % 10if ten_coef != 0:if thou_coef !=0 and hund_coef == 0:res += "零"res += chi_express_1_to_9(ten_coef) + "十"res += chi_express_1_to_9(num)return resdef chi_express_num(num):if num < -2 ** 31 or num > 2 ** 31 - 1:return ""if num == 0:return "零"res = ""if num < 0:res += "负"# 逻辑上规避最小值-2**31,有关数据的存储空间及表达范围if num == -2**31:res += "二十一亿"num %= -10 ** 8num = abs(num)yi_coef = num // (10 ** 8)num = num % (10 ** 8)if yi_coef != 0:res += chi_express_1_to_9999(yi_coef) + "亿"wang_coef = num // (10 ** 4)num = num % (10 ** 4)if wang_coef != 0:res += chi_express_1_to_9999(wang_coef) + "万"res += chi_express_1_to_9999(num)return res# 简单测试
if __name__ == '__main__':num = 0print(eng_express_num(num))  # Zeroprint(chi_express_num(num))  # 零num = 319print(eng_express_num(num))  # Three Hundred Nineteenprint(chi_express_num(num))  # 三百一十九num = 1014print(eng_express_num(num))  # One Thousand, Fourteenprint(chi_express_num(num))  # 一千零十四num = -2147483648print(eng_express_num(num))  # Negative, Two Billion, One Hundred Forty Seven Million, Four Hundred Eighty Three Thousand, Six Hundred Forty Eightprint(chi_express_num(num))  # 负二十一亿四千七百四十八万三千六百四十八num = 2147483647print(eng_express_num(num))  # Two Billion, One Hundred Forty Seven Million, Four Hundred Eighty Three Thousand, Six Hundred Forty Sevenprint(chi_express_num(num))  # 二十一亿四千七百四十八万三千六百四十七

有任何疑问和建议,欢迎在评论区留言和指正!

感谢您所花费的时间与精力!

整型数字的英文表达和中文表达相关推荐

  1. 将整型数字转化成大写格式

    将整型数字转化成大写格式 将整型数字转化成大写格式 我们日常报表的打印,单据打印,借据.收据打印等等操作都需要用到将金额装换成大写,防止交易双方通过修改单据数字,因而我们的信息管理系统就把账单的金额转 ...

  2. PHP中IP地址与整型数字互相转换详解

    这篇文章主要介绍了PHP中IP地址与整型数字互相转换详解,本文介绍了使用PHP函数ip2long与long2ip的使用,以及它们的BUG介绍,最后给出自己写的两个算法,需要的朋友可以参考下 IP转换成 ...

  3. 1295. 统计位数为偶数的数字(to_string 将整型数字变为字符串)

    给你一个整数数组 nums,请你返回其中位数为 偶数 的数字的个数. 示例 1: 输入:nums = [12,345,2,6,7896] 输出:2 解释: 12 是 2 位数字(位数为偶数) 345 ...

  4. Java 判断是否为汉字 判断是否为乱码 判断字符串是否为双整型数字 整数 数字...

    /**   * 判断是否为汉字   *    * @param str   * @return   */  public static boolean isGBK(String str) {   ch ...

  5. C语言之字符串探究(七):atoi、itoa——整型数字和字符串的相互转换

    相关博文:C++之char和string字符串类探究 相关博文:C语言之数组探究(一):定义.大小.初始化.访问和三要素 相关博文:C语言之字符串探究(一):字符串与字符数组 相关博文:C语言之字符串 ...

  6. 如何判断一个整型数字是不是对称数字

    如何判断一个整型数字是不是对称数字(用纯C语言实现) 比如输入是1569651是一个对称数字,而25则不是一个对称数字. 有两种判断方法: 1. 将输入的数字分解成一个个数字,然后进行判断. 2. 将 ...

  7. oracle查询int转字符,高效实现整型数字转字符串int2str的方法

    将数字转换成字符串有很多方法,现在给出一种高效的实现方法.开阔眼界. char* int2str(unsigned int values) { const char digits[11] = &quo ...

  8. 数字的英文表达和中文表达

    //数字的英文表达和中文表达 public class NumEngAndChinese{//*************************中文表达************************ ...

  9. 整型数字转换成罗马数字

    版权声明:本文为博主原创文章,转载请注明出处. 个人博客地址:https://yangyuanlin.club 欢迎来踩~~~~ integer to roman Given an integer, ...

  10. ip地址转换数字函数 iton_PHP中IP地址与整型数字互相转换详解

    IP转换成整型存储是数据库优化一大趋势,不少人目前存储IP时还在使用字符串类型存储,字符串索引比整型索引消耗资源很多,特别是表中数据量大的时候,以及求查询某一个ip段的数据,今天说的ip是指ip4,i ...

最新文章

  1. 从零开始学习 webservice第一集,java webservice简单实例入门教程
  2. Centos7 中文乱码切换中英字符
  3. 【转】LCS和LCS服务器应用程序概述
  4. 计算机基础--操作系统基础
  5. lisp如何绘制梯形_建筑考研 | 如何用数据库思维拓宽设计思路?(以清华考研快题为例)...
  6. php函数 99乘法表,[菜鸟学php] php版自定义函数实现99乘法表
  7. windows8无法播放优酷土豆视频解决方法
  8. 校验码的计算方法说明
  9. Java如何调用webservice
  10. 计算机一级三维饼图,计算机考试excel制作复合饼图的方法
  11. 成功解决RecursionError: maximum recursion depth exceeded
  12. 倾斜摄影当中重叠度、传感器尺寸、焦距等参数问题梳理
  13. element ui中table合并相同内容单元格
  14. 阿里品牌数据银行分析师复习资料库——基础标签
  15. Gitea 1.4 未授权远程代码执行漏洞复现
  16. Sequential Recommender Systems: Challenges, Progress and Prospects翻译和笔记
  17. TCP/IP和TCP,UDP
  18. Blog选址,可实现通过xml-rpc标准进行远程离线发布的Blog服务商(BSP)测评
  19. Mybatis超强大的动态 SQL 大全
  20. 【分布式】一致性哈希和哈希槽

热门文章

  1. 经常流鼻血不是上火,可能是寄生水蛭钻进了你的鼻腔
  2. tassel软件使用linux,科学网—TASSEL 关联分析软件 起步教程 - 邓飞的博文
  3. AUTOCAD——合并图层
  4. Excel点击按钮隐藏指定行
  5. 台达PLC与紫金桥监控组态软件的连接
  6. 不同转录组测序方法总结
  7. VBA_自定义对数函数
  8. java实现对接建行支付及其回调
  9. 使用StarRocks内置工具Routine Load同步Mysql/TiDB/PG等增量更新数据到StarRocks
  10. 拉开中兴帷幕 张朝阳再造搜狐