将一个正整数转化成中文(0~2^32-1)
例:100003
1,转换为list
-
一 零 零 零 零 三
2 ,插入单位
-
一十 零个 万 零千 零百 零十 三个
3 ,去零和零的单位
-
一十 万 零 三个
4 ,去除单位 “个”
-
一十 万 零 三
检验数
(0)零
(100003)一十万零三
(854333219)八亿五千四百三十三万三千二百一十九
(1964403449)一十九亿六千四百四十万三千四百四十九
(435689022)四亿三千五百六十八万九千零二十二
(1119492792)一十一亿一千九百四十九万二千七百九十二
(1216391991)一十二亿一千六百三十九万一千九百九十一
(1506945591)一十五亿零六百九十四万五千五百九十一
(2073076683)二十亿七千三百零七万六千六百八十三
(1257921860)一十二亿五千七百九十二万一千八百六十
(1058521781)一十亿五千八百五十二万一千七百八十一
(133502345)一亿三千三百五十万二千三百四十五
代码
public class IntString {
private static String[] capital =new String[] {"零", "一", "二", "三", "四", "五", "六", "七", "八", "九"};
private static HashMap<Integer,String> unit=new HashMap<Integer, String>() {{
put(1,"个");
put(10,"十");
put(100,"百");
put(1000,"千");
put(10000,"万");
put(100000000,"亿");
}};
private static ArrayList<String> toList(int value){
String valueString=String.valueOf(value);
ArrayList<String> list=new ArrayList<String>();
int up=1;
int lower=1;
for(int i=valueString.length()-1;i>=0;i--) {
int number=(int)(valueString.charAt(i)-48);
if(up==10000||up==100000000) {
String upUnit = unit.get(up);
list.add(0,upUnit);
}
String lowerUnit = unit.get(lower);
if(lowerUnit!=null) {
list.add(0,lowerUnit);
}
list.add(0,capital[number]);
up*=10;
if(lower==1000) {
lower=1;
}else
lower*=10;
}
return list;
}
public static String toCapital(int value) {
ArrayList<String> list = toList(value);
for(int i=0;i<list.size();i++) {
String itme = list.get(i);
if("零".equals(itme)) {
if(i>0) {
String last = list.get(i-1);
if("零".equals(last)) {
list.remove(i);
list.remove(i);
i--;
continue;
}
}
String next = list.get(i+1);
if("个".equals(next)) {
list.remove(i);
list.remove(i);
i--;
}else{
list.remove(i+1);
}
}
}
String ret="";
for(String e:list){
if(! "个".equals(e)) {
ret+=e;
}
}
return ret.length()==0?"零":ret;
}
public static void main(String[] args) {
System.out.println("("+0+")"+toCapital(0));
System.out.println("("+100003+")"+toCapital(100003));
for(int i=0;i<10;i++) {
int value=(int) (Integer.MAX_VALUE * Math.random());
System.out.println("("+value+")"+toCapital(value));
}
}
}