数字转换成英文



/**
 * Jessi初学英语,为了快速读出一串数字,编写程序将数字转换成英文: 如22:twenty two,123:one hundred and twenty
 * three。
 * 
 * 说明: 数字为正整数,长度不超过十位,不考虑小数,转化结果为英文小写; 非法数据请返回“error”;
 * 
 * 关键字:and,billion,million,thousand,hundred。

 */

package JavaExample2;

import java.util.Scanner;

public class Example6 {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		while (scan.hasNext()) {
			int number = scan.nextInt();
			String s = NumberToEnglishString(number);
			System.out.println(s);
		}
	}

	public static String NumberToEnglishString(int number) {
		String s = null;
		if (number < 0) {
			s = "error";
			return s;
		}
		if (number < 20) {
			switch (number) {
			case 0:
				s = "zero";
				return s;
			case 1:
				s = "one";
				return s;
			case 2:
				s = "two";
				return s;
			case 3:
				s = "three";
				return s;
			case 4:
				s = "four";
				return s;
			case 5:
				s = "five";
				return s;
			case 6:
				s = "six";
				return s;
			case 7:
				s = "seven";
				return s;
			case 8:
				s = "eight";
				return s;
			case 9:
				s = "nine";
				return s;
			case 10:
				s = "ten";
				return s;
			case 11:
				s = "eleven";
				return s;
			case 12:
				s = "twelve";
				return s;
			case 13:
				s = "thirteen";
				return s;
			case 14:
				s = "fourteen";
				return s;
			case 15:
				s = "fifteen";
				return s;
			case 16:
				s = "sixteen";
				return s;
			case 17:
				s = "seventeen";
				return s;
			case 18:
				s = "eighteen";
				return s;
			case 19:
				s = "nineteen";
				return s;
			default:
				s = "error";
				return s;
			}
		}

		if (number < 100) {
			if (number % 10 == 0) {
				switch (number) {
				case 20:
					s = "twenty";
					return s;
				case 30:
					s = "thirty";
					return s;
				case 40:
					s = "forty";
					return s;
				case 50:
					s = "fifty";
					return s;
				case 60:
					s = "sixty";
					return s;
				case 70:
					s = "seventy";
					return s;
				case 80:
					s = "eighty";
					return s;
				case 90:
					s = "ninety";
					return s;
				default:
					s = "error";
					return s;
				}
			} else {
				s = NumberToEnglishString(number / 10 * 10) + ' '
						+ NumberToEnglishString(number % 10);
				return s;
			}
		}

		if (number < 1000) {
			if (number % 100 == 0) {
				s = NumberToEnglishString(number / 100) + " hundred";
				return s;
			} else {
				s = NumberToEnglishString(number / 100) + " hundred and "
						+ NumberToEnglishString(number % 100);
				return s;
			}
		}

		if (number < 1000000) {
			if (number % 1000 == 0) {
				s = NumberToEnglishString(number / 1000) + " thousand";
				return s;
			} else {
				s = NumberToEnglishString(number / 1000) + " thousand "
						+ NumberToEnglishString(number % 1000);
				return s;
			}
		}

		if (number < 1000000000) {
			if (number % 1000000 == 0) {
				s = NumberToEnglishString(number / 1000000) + " million";
				return s;
			} else {
				s = NumberToEnglishString(number / 1000000) + " million "
						+ NumberToEnglishString(number % 1000000);
				return s;
			}
		}

		if (number < 999999999) {
			if (number % 1000000000 == 0) {
				s = NumberToEnglishString(number / 1000000000) + " billion";
				return s;
			} else {
				s = NumberToEnglishString(number / 1000000000) + " billion "
						+ NumberToEnglishString(number % 1000000000);
				return s;
			}
		}

		if (number > 999999999) {
			s = "error";
			return s;
		}
		return s;
	}
}


### 如何实现数字英文字符串的转换 将数字转换为英文表示形式是一种常见的需求,尤其是在财务报表、票据打印或其他需要文字描述的应用场景中。以下是几种常见编程语言中的解决方案。 #### Python 实现 Python 中可以通过自定义逻辑来实现数字英文字符串的转换。以下是一个简单示例: ```python def number_to_words(num): ones = ["", "One ", "Two ", "Three ", "Four ", "Five ", "Six ", "Seven ", "Eight ", "Nine ", "Ten ", "Eleven ", "Twelve ", "Thirteen ", "Fourteen ", "Fifteen ", "Sixteen ", "Seventeen ", "Eighteen ", "Nineteen "] tens = ["", "", "Twenty ", "Thirty ", "Forty ", "Fifty ", "Sixty ", "Seventy ", "Eighty ", "Ninety "] if num == 0: return "Zero" result = "" if num >= 1000000000: result += number_to_words(num // 1000000000) + "Billion " num %= 1000000000 if num >= 1000000: result += number_to_words(num // 1000000) + "Million " num %= 1000000 if num >= 1000: result += number_to_words(num // 1000) + "Thousand " num %= 1000 if num >= 100: result += number_to_words(num // 100) + "Hundred " num %= 100 if num >= 20: result += tens[num // 10] + number_to_words(num % 10) elif num > 0 and num < 20: result += ones[num] return result.strip() print(number_to_words(12345)) # 输出 Twelve Thousand Three Hundred Forty Five ``` 上述代码实现了基本的数字英文单词的转换[^1]。 #### Java 工具类实现 在 Java 编程中,也可以创建类似的工具类来进行数字英文字符串的转换。下面展示了一个简单的例子: ```java public class NumberToWords { private static final String[] ONES = {"", "One ", "Two ", "Three ", "Four ", "Five ", "Six ", "Seven ", "Eight ", "Nine "}; private static final String[] TEENS = {"Ten ", "Eleven ", "Twelve ", "Thirteen ", "Fourteen ", "Fifteen ", "Sixteen ", "Seventeen ", "Eighteen ", "Nineteen "}; private static final String[] TENS = {"", "", "Twenty ", "Thirty ", "Forty ", "Fifty ", "Sixty ", "Seventy ", "Eighty ", "Ninety "}; public static String convert(int num) { if (num == 0) return "Zero"; StringBuilder sb = new StringBuilder(); if ((num / 1000000000) > 0) { sb.append(convert(num / 1000000000)).append("Billion "); num %= 1000000000; } if ((num / 1000000) > 0) { sb.append(convert(num / 1000000)).append("Million "); num %= 1000000; } if ((num / 1000) > 0) { sb.append(convert(num / 1000)).append("Thousand "); num %= 1000; } if ((num / 100) > 0) { sb.append(convert(num / 100)).append("Hundred "); num %= 100; } if (num > 0 && num < 10) { sb.append(ONES[num]); } else if (num >= 10 && num < 20) { sb.append(TEENS[num - 10]); } else if (num >= 20) { sb.append(TENS[num / 10]).append(ONES[num % 10]); } return sb.toString().trim(); } public static void main(String[] args) { System.out.println(convert(12345)); // 输出 Twelve Thousand Three Hundred Forty Five } } ``` 这段代码展示了如何利用数组存储不同范围内的数值对应的英文名称,并通过递归调用来构建完整的英文表达[^2]。 #### C++ 自定义函数实现 C++ 可以通过 `sprintf` 函数或者其他方式手动拼接字符串完成该任务。这里提供一种基于条件判断的方法: ```cpp #include <iostream> #include <string> std::string numberToWords(int num); int main() { std::cout << numberToWords(12345); // 输出 Twelve Thousand Three Hundred Forty Five } std::string numberToWords(int num) { const char* ones[20] = { "", "One ", "Two ", "Three ", "Four ", "Five ", "Six ", "Seven ", "Eight ", "Nine ", "Ten ", "Eleven ", "Twelve ", "Thirteen ", "Fourteen ", "Fifteen ", "Sixteen ", "Seventeen ", "Eighteen ", "Nineteen " }; const char* tens[10] = { "", "", "Twenty ", "Thirty ", "Forty ", "Fifty ", "Sixty ", "Seventy ", "Eighty ", "Ninety " }; if (num == 0) return "Zero"; std::string res; if (num >= 1000000000){ res += numberToWords(num/1000000000) + "Billion "; num %= 1000000000; } if (num >= 1000000){ res += numberToWords(num/1000000) + "Million "; num %= 1000000; } if (num >= 1000){ res += numberToWords(num/1000) + "Thousand "; num %= 1000; } if (num >= 100){ res += numberToWords(num/100) + "Hundred "; num %= 100; } if (num >= 20){ res += tens[num/10]; num %= 10; } if (num > 0){ res += ones[num]; } return res.substr(0, res.size()-1); } ``` 以上程序同样遵循分治法的思想逐步拆解大数并将其转化为对应的文字表述[^4]。 #### 在线工具推荐 除了自行开发外,还可以借助第三方网站或 API 来快速实现这一目标。例如 Numeral.js 是一款流行的 JavaScript 库,支持多种格式化的数字操作,其中包括将阿拉伯数字转写成英语单词的功能[^5]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值