面试遇到算法题,就是把阿拉伯数字转化成汉字的描述,比如123是一百二十三,10080是一万零八十
自己尝试实现了一下,发现实现的太麻烦,代码太多而且容易有考虑不到的地方,下面贴出,自己的写法和网上找的比较简便的写法
自己的写法:
public class NumConvertUtil{
private static final String[] nums=new String[]{"零","一","二","三","四","五","六","七","八","九"};
private static final String[] units=new String[]{"十","百","千","万","亿"};
public static void main(String[] args){
//创建输入对象
Scanner sc=new Scanner(System.in);
//获取用户输入的字符串
String str=null;
int times=0;
while(times<20){
times++;
System.out.print("请输入数字:");
str=sc.nextLine();
int num=Integer.parseInt(str);
String res=convert(num);
System.out.print("结果是:"+res);
}
//for(int i=10001;i<12001;i++){
// System.out.println(convert(i));
//}
}
/**
* 将数字转换为汉字 例如 123 一百二十三
* 10340 一万零三百四十
*/
public static String convert(int input){
String ouput="";
if (input>=100000000){
ouput=thousandAndLess(ouput,input/100000000);
ouput+=units[4];
}
input=input%100000000;
if(input>=10000){
ouput=thousandAndLess(ouput,input/10000);
ouput+=units[3];
}else{
ouput+=addZero(ouput);
}
input=input%10000;
ouput=thousandAndLess(ouput,input);
return ouput;
}
//获取千及以下
private static String thousandAndLess(String ouput,int input){
if (input/1000>0){
ouput+=nums[input/1000];
ouput+=units[2];
}else{
ouput+=addZero(ouput);
}
input=input%1000;
if (input/100>0){
ouput+=nums[input/100];
ouput+=units[1];
}else{
ouput+=addZero(ouput);
}
input=input%100;
if (input/10>0){
if(ouput.length()>0||input/10>1){
ouput+=nums[input/10];
}
ouput+=units[0];
}else{
ouput+=addZero(ouput);
}
input=input%10;
if (input>0){
ouput+=nums[input];
}
if (ouput.length()>0&&nums[0].equals(ouput.substring(ouput.length()-1))){
ouput=ouput.substring(0,ouput.length()-1);
}
return ouput;
}
private static String addZero(String ouput){
if(ouput.length()>0&&!nums[0].equals(ouput.substring(ouput.length()-1))&&!units[0].equals(ouput.substring(ouput.length()-1))){
return nums[0];
}else{
return "";
}
}
}
网上的写法
java中数字转汉字
public class NumConvertChinese{
private static final String[] nums=new String[]{"零","一","二","三","四","五","六","七","八","九"};
private static final String[] units=new String[]{"","十","百","千","万","十","百","千","亿","十","百","千"};
public static void main(String[] args){
//创建输入对象
Scanner sc=new Scanner(System.in);
//获取用户输入的字符串
/* String str=null;
int times=0;
System.out.print("请输入数字:");
str=sc.nextLine();
int num=Integer.parseInt(str);
String res=convert(num);
System.out.print("结果是:"+res); */
/* while(times<20){
times++;
System.out.print("请输入数字:");
str=sc.nextLine();
int num=Integer.parseInt(str);
String res=convert(num);
System.out.print("结果是:"+res);
} */
for(int i=10001;i<12001;i++){
System.out.println(convert(i));
}
}
/**
* 将数字转换为汉字 例如 123 一百二十三
* 10340 一万零三百四十
*/
public static String convert(int input){
String output="";
int count=0;
while(input>0){
output=nums[input%10]+units[count]+output;
input=input/10;
count++;
}
return output.replaceAll("零[千百十]", "零").replaceAll("零+万", "万")
.replaceAll("零+亿", "亿").replaceAll("亿万", "亿零")
.replaceAll("零+", "零").replaceAll("零$", "");
}
}