本以为是个很简单的题,但写完之后发现各种bug,各种改。只是实现了功能而已。程序效果如下:
请输入您的数字(输入quit退出):
1
一
103
一百零三
12349234
一千二百三十四万九千二百三十四
10023002340
一百亿零二千三百万零二千三百四十
100000000000
一千亿
324034030
三亿二千四百零三万四千零三十
1000002130
一十亿零二千一百三十
源代码如下:
import java.util.Scanner;
public class Convert {
public static String[] units= {"","十","百","千","万"};
public static String[] flagUnits= {"","万","亿"};
public static void main(String[] args)
{
Scanner sc=new Scanner(System.in);
System.out.println("请输入您的数字(输入quit退出):");
while(true)
{
String number=sc.nextLine();
if(number.equals("quit"))
break;
System.out.println(getResult(number));
}
}
static String getResult(String number)
{
int numberLen=number.length();
int subFlag=(int) Math.ceil(number.length()/4.0);
boolean isFirstCharArray=true;
StringBuffer sbResult=new StringBuffer();
int notZeroFlag=0;
while(number.charAt(numberLen-1-notZeroFlag)=='0')
{
notZeroFlag++;
}
while(subFlag>(notZeroFlag)/4)
{
if(isFirstCharArray)
{
char[] subCharArray=new char[numberLen%4==0?4:numberLen-(subFlag-1)*4];
subFlag--;
number.getChars(0, subCharArray.length, subCharArray, 0);
sbResult.append(getSubResult(subCharArray,subFlag,notZeroFlag));
isFirstCharArray=false;
}
else
{
char[] subCharArray=new char[4];
number.getChars(numberLen-(subFlag--)*4, numberLen-(subFlag)*4, subCharArray, 0);
sbResult.append(getSubResult(subCharArray,subFlag,notZeroFlag));
}
}
return deleteZero(sbResult);
}
static StringBuffer getSubResult(char[] sub,int subflag,int notZeroFlag)
{
int zeroFlag=0;
while(sub[sub.length-1-zeroFlag]=='0')
{
zeroFlag++;
if(zeroFlag==sub.length)
{
return new StringBuffer("零");
}
}
StringBuffer sb=new StringBuffer();
for(int i=0;i<sub.length-zeroFlag;i++)
{
sb.append(charToStr(sub[i]));
if(sub[i]=='0')
{
continue;
}
sb.append(units[sub.length-i-1]);
}
sb.append(flagUnits[subflag]);
if(zeroFlag!=0&&subflag!=0&¬ZeroFlag/4!=subflag)
{
sb.append("零");
}
return sb;
}
static String deleteZero(StringBuffer sb)
{
for(int i=0;i<sb.length()-1;i++)
{
if(sb.charAt(i)==sb.charAt(i+1))
{
sb.replace(i, i+1, "");
i--;
}
}
return sb.toString();
}
static String charToStr(char numChar)
{
switch(numChar)
{
case '1':
return "一";
case '2':
return "二";
case '3':
return "三";
case '4':
return "四";
case '5':
return "五";
case '6':
return "六";
case '7':
return "七";
case '8':
return "八";
case '9':
return "九";
case '0':
return "零";
default:
return "";
}
}
}