中文数字转换笔试题
原题:把一个六位一下的阿拉伯数字转换成中文数字,阿拉伯数字不包含小数这个题以前自己也做过,费了九牛二虎的力气才做出来。这次打算凭记忆再写一遍,后来发现可能有更好的方法。作出题后,自己内心中一点点丑陋的小得意又冒出头来,为此自己还检讨了一下,就打算作罢了。
这样就能约束自己吗,很显然是不能,要突破。所以写出来,作为自己学习java编程的小小花絮的记忆。
(上面几句纯属自嘲,请勿拍砖)
import java.util.Scanner;
public class NumberConvert {
private static String[] zh = new String[] { "零", "壹", "贰", "叁", "肆", "伍",
"陆", "柒", "捌", "玖" };
private static String[] loc = new String[] { "", "十", "百", "仟", "万", "十",
"百", "仟" };
public static void main(String[] args) {
int num = getNumber();
if(num==-1){
return ;
}
String result = convert(num);
System.out.println(result);
}
private static String convert(int num) {
if (num == 0) {
return "零";
}
String result = new String();
boolean flag = false;
for (int i = String.valueOf(num).length(); i > 0; i--) {
int temp = (int) (num / (Math.pow(10, i - 1)) % 10);
if (temp == 0) {
flag = true;
continue;
} else {
if (flag) {
result += "零";
flag = false;
}
result += zh[temp];
result += loc[i - 1];
}
}
return result;
}
private static int getNumber() {
Scanner sc = new Scanner(System.in);
for (;;) {
String str = sc.next();
if (str.matches("^\\d+$")) {
return Integer.parseInt(str);
} else {
if ("exit".equals(str)) {
return -1;
}
System.out.println("用户输入不合规则,请重新输入:");
continue;
}
}
}
}