参考java.math.BigInteger 写一个不行吗?

解决方案 »

  1.   

    int 转 大写
    class Transform{
    private final static char[] UNITCHAR1={'万','亿'};
    private final static char[] UNITCHAR2={'仟','佰','拾'};
    private final static char[] NUMCHAR={'玖','捌','柒','陆','伍','肆','叁','贰','壹','零'};
    private final static char MINUSCHAR = '负';
    private final static String ZEROSTRING = "零";

    public static String int2RMB(){

    return "自己练练手吧";
    }

    public static String int2String(int arg){
    if(arg>=0)return n2s(String.valueOf(arg));
    else return MINUSCHAR+n2s(String.valueOf(arg).substring(1));
    }

    public static String int2String(String arg){
    //make sure argument is valid
    int i=arg.length();
    if(i<1 || i>12)throw new IllegalArgumentException();
    i-=1;
    do{
    if(arg.charAt(i)<'0' || arg.charAt(i)>'9')
    throw new IllegalArgumentException();
    i--;
    }while(i>0);

    //
    if(arg.charAt(0) == '-')
    return MINUSCHAR+n2s(arg.substring(1));
    else if(arg.charAt(i)>='0' || arg.charAt(i)<='9')
    return n2s(arg);
    else
    throw new IllegalArgumentException();
    }

    /**
      *convert a positive number to string
      *
      */
    private static String n2s(String arg){
    //
    StringBuffer result = new StringBuffer();
    int argLength = arg.length(),
        beginIndex = 0,
        endIndex,i;
    String temp = "";

    //
    if(argLength%4==0){
    endIndex = 4;
    i = argLength/4;
    }else{
    endIndex = argLength%4;
    i = argLength/4+1;
    }

    //transform to string
    for(;i>0;i--){
    temp=n42s(arg.substring(beginIndex,endIndex));
    if(temp!=null){
    result.append(temp);
    if(i!=1)result.append(UNITCHAR1[i-2]);
    }
    beginIndex=endIndex;
    endIndex=beginIndex+4;
    }

    //return result
    if(result.length()==0)return ZEROSTRING;
    if(result.charAt(0)==NUMCHAR[9])
    return result.substring(1,result.length());
    return result.toString();
    }

    //transform 4 num to string 
    private static String n42s(String arg){
    int i,j;
    int argLength = arg.length();
    StringBuffer result = new StringBuffer();

    //convert argument to formatted char array 
    char[] c= {'0','0','0','0'};
    for(i=argLength,j=3;i>0;i--,j--){
    c[j]=arg.charAt(i-1);
    }

    //convert to string and according to previous c to encode
    int code=0;
    for(i=0;i<3;i++){
    if(c[i]!='0'){
    result.append(NUMCHAR['9'-c[i]]+""+UNITCHAR2[i]);
    code|=1;
    }
    code<<=1;
    }
    if(c[3]!='0'){
    result.append(NUMCHAR['9'-c[3]]);
    code|=1;
    }

    //machining and return result
    switch(code){
    case 1://0001
    case 2://0010
    case 3://0011
    case 4://0100
    case 6://0110
    case 7://0111
    result.insert(0,ZEROSTRING);
    return result.toString();

    case 9://1001
    case 10://1010
    case 11://1011
    result.insert(2,ZEROSTRING);
    return result.toString();
    case 5://0101
    result.insert(0,ZEROSTRING);
    result.insert(result.length()-1,ZEROSTRING);
    return result.toString();
    case 13://1101
    result.insert(result.length()-1,ZEROSTRING);
    return result.toString();
    case 0://0000
    return null;
    default://1000 1100 1110 1111
    return result.toString();

    }

    }
    }