0
点赞
收藏
分享

微信扫一扫

(每日一练C++)CC208 数字发音

玉字璧 2022-05-02 阅读 50

描述

给定一个非负整数x,请编写一个算法返回一个string,代表该整数的英文描述。

测试样例:

1234
返回:"One Thousand,Two Hundred Thirty Four"

/*
 * 输入数字输出相应字符串
 * 
 */

public class NumToStringx {
	String[] baseNum = { "zero", "one", "two", "three", "four", "five", "six",
			"seven", "eight", "nine", "ten", "eleven", "twelve", " thirteen",
			" fourteen", " fifteen", " sixteen", "seventeen", "eighteen",
			"nineteen", };
	String[] tyNum = { "twenty", "thirty", "forty", "fifty", "sixty",
			"seventy", "eighty", "ninety" };
	String[] bigNum = { "", "shousand", "million", "billion" };

	public void numToString(int n) {
		StringBuffer result = null;
		int temp;
		int num = n;
		int j = 0;
		if (num == 0) {
			System.out.println(baseNum[0]);
			return;
		}
		while (num != 0) {
			temp = num % 1000;// 三位数字分为一段
			if (j == 0) {// j表示thousand、million、billion
				result = tempToString(temp).append(" " + bigNum[j]);
			} else {
				result = tempToString(temp).append(" " + bigNum[j])
						.append(" , ").append(result);
			}
			j++;
			num = num / 1000;
		}
		System.out.println(result);
	}

	// 将三位数转换为string
	public StringBuffer tempToString(int temp) {//
		StringBuffer num = new StringBuffer();
		int i = temp / 100;
		if (i != 0)
			num = num.append(baseNum[i] + " hundred ");
		i = temp % 100;
		if (0 < i && i < 19) {
			num = num.append(baseNum[i]);
		} else {
			num = num.append(tyNum[i / 10 - 1]);
			if (i / 10 != 0)// 排除尾数为0
				num.append("-" + baseNum[i / 10]);
		}

		return num;
	}

	public static void main(String[] ede) {
		NumToStringx numToStringx = new NumToStringx();
		numToStringx.numToString(0);
		numToStringx.numToString(46);
		numToStringx.numToString(546);
		numToStringx.numToString(6546);
		numToStringx.numToString(1354565460);
	}

}
举报

相关推荐

0 条评论