把int型非负数转换为英文

简介: 数字转换为英文 输入为int型非负数,最大值为2^31 - 1 = 2 147 483 647 输出为String英文,最大输出为Two Billion One Hundred Forty Seven Million Four Hundred Eighty Three Thousand Six ...

数字转换为英文

输入为int型非负数,最大值为2^31 - 1 = 2 147 483 647

输出为String英文,最大输出为Two Billion One Hundred Forty Seven Million Four Hundred Eighty Three Thousand Six Hundred Forty Seven

输出要求每个单词首字母大写,之间用空格隔开,不需要用“and”做连词

例如:

123 -> "One Hundred Twenty Three"
12345 -> "Twelve Thousand Three Hundred Forty Five"
1234567 -> "One Million Two Hundred Thirty Four Thousand Five Hundred Sixty Seven"

 

处理思路

观察数字2 147 483 647,可以看出由4段组成;每段都是0到999的数字

尝试将数字分段处理;截取每段数字,写专门的函数处理0~999的数字;最后将它们连接起来

编制String数组存放需要的数字;需要时从数组中取用

完整Java代码如下:

  1 /**
  2  * 
  3  * @author Rust Fisher
  4  * biggest number = 2 147 483 648 - 1
  5  * Two Billion One Hundred Forty Seven Million Four Hundred Eighty Three Thousand Six Hundred Forty Seven
  6  */
  7 public class Int2Eng {
  8     public static String numberToWords(int num) {
  9         String result = "";
 10         int inputNum = num;
 11         if (num == 0) {
 12             result = "Zero";
 13             return result;
 14         }
 15         
 16         if (inputNum/1000 == 0 ) {//0 < num < 1000
 17             return getThousand(inputNum%1000);// 处理 xxx
 18         }
 19         
 20         result = getThousand(inputNum%1000);
 21         inputNum = inputNum/1000; //Rust:cut the tail 2 147 483 xxx
 22         
 23         if (inputNum/1000 == 0) {    // 1000 <= num < 1 000 000 
 24             if (result.equals("")) {
 25                 return (getThousand(inputNum%1000) + " Thousand");
 26             } else {
 27                 return (getThousand(inputNum%1000) + " Thousand " + result);
 28             }
 29         } else {// 1 000 000 < num
 30             if (result.equals("") && inputNum%1000 == 0) {
 31                 result = getThousand(inputNum%1000);//do nothing
 32             } else if (!result.equals("") && inputNum%1000 != 0){
 33                 result = getThousand(inputNum%1000) + " Thousand " + result;
 34             } else if (result.equals("") && inputNum%1000 != 0) {
 35                 result = getThousand(inputNum%1000) + " Thousand" + result;
 36             }
 37         }
 38 
 39         inputNum = inputNum/1000;
 40         if (inputNum/1000 == 0) {//1 000 000 <= num < 1 000 000 000
 41             if (result.equals("")) {
 42                 return (getThousand(inputNum%1000) + " Million");
 43             } else {
 44                 return (getThousand(inputNum%1000) + " Million " + result);
 45             }
 46         } else {
 47             if (result.equals("") && inputNum%1000 == 0) {
 48                 result = getThousand(inputNum%1000);
 49             } else if (!result.equals("") && inputNum%1000 != 0){
 50                 result = getThousand(inputNum%1000) + " Million " + result;
 51             } else if (result.equals("") && inputNum%1000 != 0) {
 52                 result = getThousand(inputNum%1000) + " Million" + result;
 53             }
 54         }
 55         
 56         inputNum = inputNum/1000;
 57         if (result.equals("")) {
 58             if (inputNum == 1) {
 59                 return ("One"+ " Billion");
 60             } else if (inputNum == 2) {
 61                 return ("Two"+ " Billion");
 62             }
 63         } else {
 64             if (inputNum == 1) {
 65                 return ("One"+ " Billion " + result);
 66             } else if (inputNum == 2) {
 67                 return ("Two"+ " Billion " + result);
 68             }
 69         }
 70         return result;
 71     }
 72     
 73     public static String getThousand(int input) {
 74         String MaxNum = "Two Billion One Hundred Forty Seven Million" +
 75                 " Four Hundred Eighty Three Thousand Six Hundred Forty Eight";
 76         String single[] = {"Zero", "One", "Two", "Three", "Four", "Five", "Six",
 77                 "Seven", "Eight", "Nine", "Ten", "Eleven", "Twelve", "Thirteen", 
 78                 "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen"};
 79         String tens[] = {"Twenty","Thirty","Forty","Fifty","Sixty","Seventy","Eighty","Ninety"};
 80 
 81         String output = "";
 82 
 83         int res1 = input%1000;
 84         if (res1/100 != 0) {
 85             output = output + single[res1/100] + " Hundred";
 86         }
 87         res1 = res1%100;// 1~99
 88 
 89         if (res1 == 0) {
 90             // do nothing
 91         } else if (res1 < 20) {
 92             if (output.equals("")) {
 93                 output = output + single[res1];
 94             } else {
 95                 output = output + " " + single[res1];
 96             }
 97             return output;
 98         } else if (res1 >= 20) {
 99             if (output.equals("")) {
100                 output = tens[res1/10 - 2];
101             } else {
102                 output = output + " " + tens[res1/10 - 2];
103             }
104         }
105 
106         res1 = res1%10;
107         if (res1 == 0) {
108 
109         } else {
110             output = output +  " " +single[res1];
111         }
112         return output;
113     }
114     
115     public static void main(String args[]) {
116 
117         System.out.println(numberToWords(2127483622));
118         System.out.println(numberToWords(12));
119         System.out.println(numberToWords(3555000));
120         System.out.println(numberToWords(1000));
121         System.out.println(numberToWords(1000000));
122         System.out.println(numberToWords(2000000010));
123         
124     }
125 }

输出:


 

Two Billion One Hundred Twenty Seven Million Four Hundred Eighty Three Thousand Six Hundred Twenty Two
Twelve
Three Million Five Hundred Fifty Five Thousand
One Thousand
One Million
Two Billion Ten


整个程序是顺序执行的,条件合适时即返回结果

目录
相关文章
|
6月前
|
编译器 C++
C++_int负数转unsigned
C++_int负数转unsigned
56 0
|
6月前
|
数据采集 分布式计算 数据处理
Dataphin常见问题之与指定类型int不兼容如何解决
Dataphin是阿里云提供的一站式数据处理服务,旨在帮助企业构建一体化的智能数据处理平台。Dataphin整合了数据建模、数据处理、数据开发、数据服务等多个功能,支持企业更高效地进行数据治理和分析。
|
6月前
|
SQL 流计算 OceanBase
OceanBase CDC从热OB库采集过来的Tinyint(1)类型会默认转换成Boolean,请教一下,如果想转换成int类型,有什方法么?
【2月更文挑战第25天】OceanBase CDC从热OB库采集过来的Tinyint(1)类型会默认转换成Boolean,请教一下,如果想转换成int类型,有什方法么?
152 3
|
28天前
|
Python
[oeasy]python036_数据类型有什么用_type_类型_int_str_查看帮助
本文回顾了Python中`ord()`和`chr()`函数的使用方法,强调了这两个函数互为逆运算:`ord()`通过字符找到对应的序号,`chr()`则通过序号找到对应的字符。文章详细解释了函数参数类型的重要性,即`ord()`需要字符串类型参数,而`chr()`需要整数类型参数。若参数类型错误,则会引发`TypeError`。此外,还介绍了如何使用`type()`函数查询参数类型,并通过示例展示了如何正确使用`ord()`和`chr()`进行转换。最后,强调了在函数调用时正确传递参数类型的重要性。
19 3
|
3月前
|
Java
【Java基础面试五】、 int类型的数据范围是多少?
这篇文章回答了Java中`int`类型数据的范围是-2^31到2^31-1,并提供了其他基本数据类型的内存占用和数值范围信息。
【Java基础面试五】、 int类型的数据范围是多少?
|
3月前
|
自然语言处理 Go 数据安全/隐私保护
对 int 类型的数据加密,有哪些好的方案?
对 int 类型的数据加密,有哪些好的方案?
90 13
|
5月前
|
机器学习/深度学习 人工智能 分布式计算
人工智能平台PAI产品使用合集之int类型是否可以为raw feature
阿里云人工智能平台PAI是一个功能强大、易于使用的AI开发平台,旨在降低AI开发门槛,加速创新,助力企业和开发者高效构建、部署和管理人工智能应用。其中包含了一系列相互协同的产品与服务,共同构成一个完整的人工智能开发与应用生态系统。以下是对PAI产品使用合集的概述,涵盖数据处理、模型开发、训练加速、模型部署及管理等多个环节。
|
5月前
|
运维 Cloud Native 关系型数据库
云原生数据仓库AnalyticDB产品使用合集之布尔类型和int类型可以自动转换吗
阿里云AnalyticDB提供了全面的数据导入、查询分析、数据管理、运维监控等功能,并通过扩展功能支持与AI平台集成、跨地域复制与联邦查询等高级应用场景,为企业构建实时、高效、可扩展的数据仓库解决方案。以下是对AnalyticDB产品使用合集的概述,包括数据导入、查询分析、数据管理、运维监控、扩展功能等方面。
151 1
|
6月前
channelSftp.put(InputStream src, String dst, int mode);里的mode都是什么类型的
【5月更文挑战第15天】channelSftp.put(InputStream src, String dst, int mode);里的mode都是什么类型的
79 2
|
12月前
|
JSON 小程序 JavaScript
小程序根据返回值的int类型渲染不同的状态
小程序根据返回值的int类型渲染不同的状态
131 0

热门文章

最新文章