黑马程序员技术交流社区
标题:
有什么简单点的解法吗?
[打印本页]
作者:
huangzhaoqing
时间:
2016-8-1 21:33
标题:
有什么简单点的解法吗?
键盘录入一个大于-1小于1000的正整数,将该整数转换成中文在控制台输出
除非输入数字不在规定的范围,否则可以一直进行输入转换
小于10,数字后不需要带单位
大于9小于100,数字后需要带单位”十”
大于99小于1000,数字后需要带单位”百”
数字转换成中文样式如下:
5 五
15 一十五
115 一百一十五
作者:
caolufo
时间:
2016-8-2 00:32
第一步:转换为字符串
第二步:判定字符串长度
长度为1: 替换0-9为大写汉字
长度为2: 替换0-9为大写汉字,在中间位置添加“十
末尾为零时,去掉零(读法问题)
“一十”改为“十”(读法问题)
长度为3: 替换0-9为大写汉字,在指定位置添加“百”“十”
末尾为零时,去掉零(读法问题)
大家再改进改进
作者:
leomywork
时间:
2016-8-2 14:00
/*
* 利用 %和 / 运算符求得每一位数字并保存到数组,然后通过该数组输出结果
*/
import java.util.Scanner;
public class ToChinese {
private static final char[] CHINESE = { '零', '一', '二', '三', '四', '五', '六', '七', '八', '九', '十', '百', '千' };
private static int num = 0, arrayRealLength = 0;
private static int[] array = new int[3];
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while ((num = getNum(scanner)) != -1) {
arrayRealLength = 0;
getArray(num, array);
getChinese(array);
}
}
private static void getArray(int num, int[] array) {
for (int i = 0; i < array.length; i++) {
if (num == 0)
break;
array[i] = num % 10;
num /= 10;
arrayRealLength++;
}
}
private static int getNum(Scanner sc) {
int num = sc.nextInt();
if (num < -1 || num > 1000)
return -1;
return num;
}
private static void getChinese(int[] array) {
if (num == 0) {
System.out.print("" + CHINESE[0]);
return;
}
int lowOrderBit = -1;
if (num % 10 == 0) {
if (num % 100 == 0)
lowOrderBit = 1;
else
lowOrderBit = 0;
}
for (int i = arrayRealLength - 1; i > lowOrderBit; i--) {
System.out.print("" + CHINESE[array[i]]);
if (array[i] != 0 && i > (lowOrderBit + 1)) // 排除10或100的倍数
System.out.print(CHINESE[i + 9]);
else if (num % 100 == 0)
System.out.print(CHINESE[11]);
else if (num % 10 == 0)
System.out.print(CHINESE[10]);
}
System.out.println();
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2