键盘输入一个正整数,如101000001010,程序输出:壹仟零壹拾亿零壹仟零壹拾圆整

解决方案 »

  1.   

    我大概发几个版本的代码吧public class Change {public String change(String m){
    StringBuffer re=new StringBuffer("");int i=0;
    int j=0;
    i=m.lastIndexOf(".");
    if(i==-1) i=m.length();
    String b=m.substring(0, i);
    char[] c=b.toCharArray();
    StringBuffer s=null;
    for(i=c.length-1,j=0;i>=0;i--,j++){
    s=new StringBuffer("");
    if(i!=c.length-1 && c[i+1]!='0')
    s.append(changeNum(c[i]));
    if(c[i]!='0'){
    switch (j%4){
    case 1:s.append("拾");break;
    case 2:s.append("佰");break;
    case 3:s.append("仟");break;
    default :break;
    }
    }
    if(j!=0 && j%8==0)
    s.append("亿");
    else if (j!=0 && j%4==0){
    s.append("万");
    }
    re=s.append(re);
    }
    re.append("圆");
    i=m.lastIndexOf(".");
    String d=null;
    if(i!=-1){
    d=m.substring(i+1,m.length());
    char[] e=d.toCharArray();
    if(e.length==1)
    if(e[0]!='0')
    re.append("零").append(changeNum(e[0])).append("角").toString();
    if(e.length==2)
    if(e[0]!='0' || e[1]!='0')
    re.append("零");
    if(e[0]!='0')
    re.append(changeNum(e[0])).append("角").toString();
    if(e[1]!='0')
    re.append(changeNum(e[1])).append("分").toString();
    }return re.toString();
    }public String changeNum(char c){
    String[] n={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
    return n[c-'0'];
    }public static void main(String[] args) {
    Change c=new Change();
    System.out.println(c.change("123456.78"));
    }} 
      

  2.   


    import java.math.*;
    public class TestTrans {
        private static final String NUM="零壹贰叁肆伍陆柒捌玖";
        private static final String UNIT="亿仟佰拾万仟佰拾元角分厘毫";//13位
        private static final String EX_UNIT="亿拾佰仟万";
        
        //将数值串转换成大写金额:一个循环就行了
        //若数值串非法,则返回:null
        public static String toCapNumber(String data)
        {
            String s=checkValue(data);
            if(s==null){return null;}//数值串非法
            if(s.charAt(0)=='0'){return "零元整";}
            String rs="";//最终结果串
            boolean hasZero=false;//有零没有输出,则置为true
            int i=0,sLen=s.length(),uLen=UNIT.length();
            int pos=uLen-sLen+i;//i所对应的单位串中的位置
            for(;i<sLen;i++,pos++)//一个循环,即求出所有的大写金额串
            {
                if(s.charAt(i)=='0')//若是字符'0'
                {
                    hasZero=true;
                    if(isUnit(i,sLen))//若对应单位是'亿'、万、元,则输出。
                    {
                        String u=getUnit(i, sLen);
                        if(u.endsWith("亿")&&!rs.endsWith("亿")||
                           u.endsWith("万")&&!rs.endsWith("亿")||
                           u.endsWith("元")    )
                        {
                         rs=rs+getUnit(i, sLen);//将单位输出
                         hasZero=false;
                        }
                    }
                }
                else
                {//不是'0'
                    if(hasZero){rs=rs+"零";hasZero=false;}
                    rs=rs+NUM.charAt(s.charAt(i)-'0')+getUnit(i, sLen);
                }
            }//for(i) 大写金额转换结束
            
            if("分厘毫".indexOf(rs.charAt(rs.length()-1))==-1)//补整
            {
                rs=rs+"整";
            }
            return rs;
        }//大写金额转换结束
            
        //检查数值串。不正确返回null。否则返回整数值串(小数点向右移4位)
        private static String checkValue(String data)
        {
            BigDecimal bd=null;
            BigInteger bi=null;        
            try{
             bd=new BigDecimal(data,MathContext.DECIMAL128).movePointRight(4);
            }catch(NumberFormatException e){ return null;}
            bi=(bd.add(new BigDecimal(0.5))).toBigInteger();
            return bi.toString();
        }
        //当前位置对应的单位若是亿、万、元,则返回true
        private static boolean isUnit(int pos,int len)
        {
            String u=getUnit(pos, len);
            return u.endsWith("亿")||u.endsWith("万")||u.endsWith("元");
        }
        //返回当前位置对应的单位
        private static String getUnit(int pos,int len)
        {
            int upos=UNIT.length()-len+pos;
            if(upos<0)
            {
                upos=-upos;
                if(upos%5==0){ return getStr(upos/5);}
                return ""+EX_UNIT.charAt(upos%5);
            }
            return ""+UNIT.charAt(upos);
        }
        //返回:亿、亿亿、亿亿亿、亿亿亿亿、。。
        private static String getStr(int i)
        {
            StringBuilder sb=new StringBuilder("亿");
            for(int j=1;j<=i;j++)
            {
                sb.append('亿');
            }
            return sb.toString();
        }
        
        public static void main(String[] args) {
            System.out.println("0.000=>"+toCapNumber("0.000"));
            System.out.println("0.50000=>"+toCapNumber("0.50000"));
            System.out.println("0.056478154e3=>"+toCapNumber("0.056478154e3"));
            System.out.println("2000300004000.5600=>"+toCapNumber("2000300004000.5600"));
            System.out.println("30000000002000000000.234=>"+toCapNumber("30000000002000000000.234"));
        }}