给一个阿拉伯数字
例如输入:123456789
输出:壹亿贰仟叁佰肆拾伍万陆仟柒佰捌拾玖我以为这个功能很简单,但是发现如果数字中间出现多个0的情况,就要有问题贴一下我的代码,比较差劲
    public static String daxie(int sum)
    {
        String [] n=new String[10];
        n[0]="零";
        n[1]="壹";
        n[2]="贰";
        n[3]="叁";
        n[4]="肆";
        n[5]="伍";
        n[6]="陆";
        n[7]="柒";
        n[8]="捌";
        n[9]="玖";
        String [] d=new String[10];
        d[0]="";
        d[1]="";
        d[2]="拾";
        d[3]="佰";
        d[4]="仟";
        d[5]="萬";
        d[6]="拾";
        d[7]="佰";
        d[8]="仟";
        d[9]="亿";
        //计算数字的位数
        int wei=(int)Math.floor
                (
                Math.log10((double)sum)
                )+1;
        System.out.println(wei);
        String str="";
        int digit=0;
        for (int i=wei;i>0;i--)
        {   
            digit=sum/
            (int)Math.pow(10.0, (double)(i-1));
            str+=n[digit].toString()+d[i].toString();            
            sum=sum%
            (int)Math.pow(10.0, (double)(i-1));
        }        str= str.replace("拾零", "拾");
        str= str.replace("零拾", "零");
           str= str.replace("零佰", "零");
           str= str.replace("零仟", "零");
           str= str.replace("零萬", "萬");
          for (int i=1;i<=6;i++)
         str= str.replace("零零", "零");
         str=str.replace("零萬", "零");
         str=str.replace("零亿", "亿");    
         str= str.replace("零零", "零");
        if (str.endsWith("零"))
        {
            str=str.substring(0, str.length()-1);
        }
        System.out.println(str);
        return str;
    }

解决方案 »

  1.   

    String [] d=new String[10];
    d[0]="";
    d[1]="";
    d[2]="拾";
    d[3]="佰";
    d[4]="仟";
    d[5]="萬";
    d[6]="拾";
    d[7]="佰";
    d[8]="仟";
    d[9]="亿";
    你这个定义到第九位,那么如果数字有10位或者以上的话,取的时候就会越界了。
    另外在万位的判断上,我觉得需要加个判断
    if(wei < 5){
    str=str.replace("零萬", "零");
    }else{
    str=str.replace("零萬", "萬");
    }
      

  2.   

    antony0203 我照你的方法改了,还是有问题
      

  3.   

    class Test
    {
        public static void main(String[] args)
        {
            String num = "零壹贰叁肆伍陆柒捌玖";
            String dw = "圆拾佰仟万亿";
            String m = "35602001.23";
            String mm[] = null;
            mm = m.split("\\.");
            String money = mm[0];        String result = num.charAt(Integer.parseInt("" + mm[1].charAt(0))) +
                "角" +
                num.charAt(Integer.parseInt("" + mm[1].charAt(1))) + "分";        for (int i = 0; i < money.length(); i++)
            {
                String str = "";
                int n = Integer.parseInt(money.substring(money.length() - i - 1,
                    money.length() - i));
                str = str + num.charAt(n);
                if (i == 0)
                {
                    str = str + dw.charAt(i);
                }
                else if ( (i + 4) % 8 == 0)
                {
                    str = str + dw.charAt(4);
                }
                else if (i % 8 == 0)
                {
                    str = str + dw.charAt(5);
                }
                else
                {
                    str = str + dw.charAt(i % 4);
                }
                result = str + result;
            }
            result = result.replaceAll("零万", "万");
            result = result.replaceAll("零([^圆]{1})", "零");
            result = result.replaceAll("零+", "零");
            result = result.replaceAll("零圆", "圆");
            result = result.replaceAll("零万", "万");
            System.out.println(result);    }
    }粗略测试过,lz验证下,看是否有问题
      

  4.   

    public class Rectangle
    {
        public static String daxie(int sum)
        {
            String [] n=new String[10];
            n[0]="";
            n[1]="壹";
            n[2]="贰";
            n[3]="叁";
            n[4]="肆";
            n[5]="伍";
            n[6]="陆";
            n[7]="柒";
            n[8]="捌";
            n[9]="玖";
            String [] d=new String[10];
            d[0]="";
            d[1]="拾";
            d[2]="佰";
            d[3]="仟";
            String [] e=new String[10];
            e[0]="萬";
            e[1]="亿";        //计算数字的位数
    //        int wei=(int)Math.floor
    //                (
    //                Math.log10((double)sum)
    //                )+1;
            String old  = ""+sum;
            int wei= (old).length();
    System.out.println("计算数字的位数=="+wei);
            
            ArrayList str = new ArrayList();
            int digit = 0;
            int digit1 = 0;
            for (int i=wei-1;i>=0;i--){
                if(!"0".equals("" + old.charAt(i))){
                    str.add(0,d[digit]);
                    str.add(0,n[Integer.parseInt("" + old.charAt(i))]);
                                }
                    digit++;
                    if(digit==4){
                        digit =0;
                        str.add(0,e[digit1]);
                        digit1++;
                    }
            }
            System.out.println(str);
            return str.toString();
        }    public static void main(String[] args)
        {
            System.out.println(daxie(100212334));
        }
    }
    计算数字的位数==9
    [壹, , 亿, 贰, 拾, 壹, , 萬, 贰, 仟, 叁, 佰, 叁, 拾, 肆, ]
    [壹, , 亿, 贰, 拾, 壹, , 萬, 贰, 仟, 叁, 佰, 叁, 拾, 肆, ]自己看看可以不
      

  5.   

    mdxk(一笑家园)
    你输入
    10000004
    试试计算数字的位数==8
    [亿, 壹, 仟, 萬, 肆, ]
    不对啊
      

  6.   

    我随便写了个类,没有考虑程序结构和可读性。不过测试似乎可以了。
    public class Test3 { /**
     * @param args
     */
    public static void main(String[] args) {
    // TODO Auto-generated method stub

    //例如输入:123456789
    //输出:壹亿贰仟叁佰肆拾伍万陆仟柒佰捌拾玖

            
            String str = "1234567890123456789";//要转换的数字
            String outString = "";
            
            int strLeanth = 0;
            int grade = 0;
            
            if(str != null ){
             strLeanth = str.trim().length();
            }
            if(strLeanth > 0 ){
             grade = strLeanth/4;
            }
            Test3 t = new Test3();
            for(int i = 0 ; i<grade; i++ ){
             String temp = str.substring(strLeanth - 4 - i * 4, strLeanth - i * 4);
             System.out.println("temp  : " + temp );
             String unit = t.getUnit(i ,"");
             outString = t.analysable(temp, unit) + outString;
            }
            if(strLeanth % 4 > 0){
             String temp = str.substring(0, strLeanth % 4);
             System.out.println("temp  : " + temp );
             String unit = t.getUnit(grade ,"");
             outString = t.analysable(temp, unit) + outString;
         }
            System.out.println("outString  : " + outString );
    }

    /**
     * 得到单位
     * @param thisUnit
     * @param unit
     * @return
     */
    public String getUnit(int thisUnit ,String unit){

    if((thisUnit - 2) <= 0){
    if(thisUnit == 1){
         unit = "萬" + unit;
         }else if(thisUnit == 2){
         unit = "亿" + unit;
         }
    }else{
    unit = getUnit(thisUnit - 2 ,"亿"+unit);
    }
    return unit;
    }



    /*
     * umStr 4位以内的数字字符串
     * unit 只有3中:"","萬" 或 "亿" 
     */
    public String analysable(String umStr, String unit){
    String [] n=new String[10];
            n[0]="零";
            n[1]="壹";
            n[2]="贰";
            n[3]="叁";
            n[4]="肆";
            n[5]="伍";
            n[6]="陆";
            n[7]="柒";
            n[8]="捌";
            n[9]="玖";
            
            String [] d=new String[10];
            d[0] = "";
            d[1]="拾";
            d[2]="佰";
            d[3]="仟";
            d[4]="萬";
            d[5]="亿";
            
    String reading = "";
    for(int i = 0; i < umStr.length() ; i++){
    String temp = umStr.substring(umStr.length() - 1 - i, umStr.length() - i);
    reading = n[new Integer(temp).intValue()]+d[i] + reading;
    }
    return reading + unit;
    }}
      

  7.   

    不好意思,之前没有针对 String str = "01000040";//要转换的数字 作判断现在修改后因该何以了。没有详细考虑算法 和 程序结构及可读性。public class Test3 { /**
     * @param args
     */
    public static void main(String[] args) {
    // TODO Auto-generated method stub
            String str = "01000040";//要转换的数字
            String outString = "";
            
            int strLeanth = 0;
            int grade = 0;
            
            if(str != null ){
             strLeanth = str.trim().length();
            }
            if(strLeanth > 0 ){
             grade = strLeanth/4;
            }
            Test3 t = new Test3();
            
            for(int i = 0 ; i<grade;  ){
             String temp = str.substring(strLeanth - 4 - i * 4, strLeanth - i * 4);
             System.out.println("temp  : " + temp );
             String unit = t.getUnit(i ,"");
             i++;
             if(strLeanth % 4 == 0 && i == grade)
             {
             outString = t.analysable(temp, unit,false) + outString;
             }else{
             outString = t.analysable(temp, unit,true) + outString;
             }
            
            
            // System.out.println("outString  : " + outString );
            }
            if(strLeanth % 4 > 0){
             String temp = str.substring(0, strLeanth % 4);
             //System.out.println("temp  : " + temp );
             String unit = t.getUnit(grade ,"");
             outString = t.analysable(temp, unit , false) + outString;
         }
            System.out.println("outString  : " + outString );
    }

    /**
     * 得到单位
     * @param thisUnit
     * @param unit
     * @return
     */
    public String getUnit(int thisUnit ,String unit){

    if((thisUnit - 2) <= 0){
    if(thisUnit == 1){
         unit = "萬" + unit;
         }else if(thisUnit == 2){
         unit = "亿" + unit;
         }
    }else{
    unit = getUnit(thisUnit - 2 ,"亿"+unit);
    }
    return unit;
    }

    /*
     * umStr 4位以内的数字字符串
     * unit 只有3中:"","萬" 或 "亿" 
     * lool 用来判断之前是否还有其他位 有:true
     */
    public String analysable(String umStr, String unit ,boolean lool){
    String [] n=new String[10];
            n[0]="零";
            n[1]="壹";
            n[2]="贰";
            n[3]="叁";
            n[4]="肆";
            n[5]="伍";
            n[6]="陆";
            n[7]="柒";
            n[8]="捌";
            n[9]="玖";
            
            String [] d=new String[10];
            d[0] = "";
            d[1]="拾";
            d[2]="佰";
            d[3]="仟";
            d[4]="萬";
            d[5]="亿";
            
    String reading = "";
    String tempReading = "";
    for(int i = umStr.length()-1 ; i > 0 ; i--){
    String temp = umStr.substring(umStr.length() - i, umStr.length() - i + 1 );
    //System.out.println("reading  : " + temp );
    System.out.println(" === " + ((unit.length() > 0 ||  i > 0 ) && new Integer(temp).intValue() == 0));
    if((unit.length() > 0 ||  i > 0 ) && new Integer(temp).intValue() == 0){
    tempReading = n[new Integer(temp).intValue()] ;
    //System.out.println("tempReading  : " + tempReading );
    }else{
    if(lool){
    reading = reading + tempReading + n[new Integer(temp).intValue()]+d[i-1];
    }else
    {
    lool = true;
    reading = n[new Integer(temp).intValue()]+d[i-1];
    }
    System.out.println("reading  : " + reading );
    }
    }
    return reading + unit;
    }}
      

  8.   

    有个错误  
    上面 
    for(int i = umStr.length()-1 ; i > 0 ; i--)
    那一行改成:
    for(int i = umStr.length() ; i > 0 ; i--)
      

  9.   

    呵呵   还有一个错
    相应的方法换成:
    /*
     * umStr 4位以内的数字字符串
     * unit 只有3中:"","萬" 或 "亿" 
     * lool 用来判断之前是否还有其他位 有:true
     */
    public String analysable(String umStr, String unit ,boolean lool){
    String [] n=new String[10];
            n[0]="零";
            n[1]="壹";
            n[2]="贰";
            n[3]="叁";
            n[4]="肆";
            n[5]="伍";
            n[6]="陆";
            n[7]="柒";
            n[8]="捌";
            n[9]="玖";
            
            String [] d=new String[10];
            d[0] = "";
            d[1]="拾";
            d[2]="佰";
            d[3]="仟";
            d[4]="萬";
            d[5]="亿";
            
    String reading = "";
    String tempReading = "";
    for(int i = umStr.length() ; i > 0 ; i--){
    String temp = umStr.substring(umStr.length() - i, umStr.length() - i + 1 );
    System.out.println("reading  : " + temp );
    if((unit.length() > 0 ||  i > 0 ) && new Integer(temp).intValue() == 0){
    tempReading = "零" ;
    //System.out.println("tempReading  : " + tempReading );
    }else{
    if(lool){
    reading = reading + tempReading + n[new Integer(temp).intValue()]+d[i-1];
    tempReading = "";
    }else
    {
    lool = true;
    reading = n[new Integer(temp).intValue()]+d[i-1];
    }
    System.out.println("reading  : " + reading );
    }
    }
    return reading + unit;
    }
      

  10.   

    以前用delphi写过个数字和汉字的转换,我觉得“零”的处理是容易出错的;然后是容易漏掉一些特殊情况。
      

  11.   

    我写了个
    有问题提出来大家一起讨论:)import java.io.*;
    public class NumberConversion {
    public static void main(String[] args) {
    String s=null;
    try {
    s = getString();
    } catch (IOException e) {

    e.printStackTrace();
    }
    int a=Integer.parseInt(s);

     
    System.out.println(saparateNumber(a)); }
    //分离数据
    public static String saparateNumber(int a){
    String str="";
    int i=0;
    boolean yi=false;
    boolean wan=false;
    if(a>=100000000){
    str+=conversionCapitalization2(a/100000000)+"亿";
    if(a/100000000<1000)
    str=str.substring(1);
    a=a%100000000;
    yi=true;

    }
    if(a>=10000){
    str+=conversionCapitalization2(a/10000)+"萬";
    if(a/10000<1000&&yi==false)
    str=str.substring(1);
    a=a%10000;
    wan=true;

    }
    if(a>0){


    str+=conversionCapitalization2(a/1);
    if(a<1000&&wan==false)
    str=str.substring(1);

    }
    return str;
    }

    //转大写
    public static String conversionCapitalization(int a){
    String cpzat ="";
    switch (a){
    case 0:
    cpzat="零";
    break;
    case 1:
    cpzat="壹";
    break;
    case 2:
    cpzat="贰";
    break;
    case 3:
    cpzat="叁";
    break;
    case 4:
    cpzat="肆";
    break;
    case 5:
    cpzat="伍";
    break;
    case 6:
    cpzat="陆";
    break;
    case 7:
    cpzat="柒";
    break;
    case 8:
    cpzat="捌";
    break;
    case 9:
    cpzat="玖";
    break;




    }

    return cpzat;
    }
    public static String conversionCapitalization2(int a){
    String tr="";
    boolean q=false;
    boolean b=false;
    boolean s=false;

    if(a>=1000){

    tr+=conversionCapitalization(a/1000)+"仟";
    a=a%1000;
    q=true;
    }
    if(a>=100){
    if(q==true)
    tr+=conversionCapitalization(a/100)+"佰";
    else
    tr+="零"+conversionCapitalization(a/100)+"佰";
    a=a%100;
    b=true;
    }
    if(a>=10){
    if(b==true)
    tr+=conversionCapitalization(a/10)+"拾";
    else
    tr+="零"+conversionCapitalization(a/10)+"拾";
    a=a%10;
    s=true;
    }
    if(a>0){
    if(s==true)
    tr+=conversionCapitalization(a/1);
    else
    tr+="零"+conversionCapitalization(a/1);
    }

    return tr;

    }
    public static String getString() throws IOException{
    InputStreamReader isr=new InputStreamReader(System.in);
    BufferedReader br=new BufferedReader(isr);


    return br.readLine();

    }}
      

  12.   

    我也写出来了,有兴趣测试一下啊.呵呵.
    import java.io.*;
    public class a
    {
       public static void main(String[] args)
       {
         String s=new String();
         BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
         
         while(true)
         {
            try{s=br.readLine();}catch(Exception e){}
           Convert c = new Convert(s.toCharArray());
           System.out.println(c);
         }
       }
    }
    class Convert
    {
      final String[] str1={"","十","百","千"};
      final String[] str2 = {"亿","萬"};
      final String[] number = {"","壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
      char[] num_char;
      StringBuffer sb=new StringBuffer();  public Convert(char[] num)
      {
        num_char=num;
      }
      public String toString()
      {
        int last=num_char.length%4;
        int pos=0;
        add(sb,new String(num_char,0,last));
        pos+=last;
        for(int i=(int) (num_char.length/4);i>0;i--)
        {
          if(i%2==0) sb.append(str2[0]);
          else sb.append(str2[1]);
          add(sb,new String(num_char,pos,4));
          pos+=4;
        }
        if(last==0) sb.deleteCharAt(0);
        return sb.toString();
      }
      private void add(StringBuffer sb,String temp)
      {
        char[] temp2=temp.toCharArray();
        int length=temp.length();
        for(int i=0;i<length;i++)
        {
          if(temp2[i]=='0') 
            if(sb.lastIndexOf("零")!=sb.length()-1 && i!=0) sb.append("零");else;
          else
          {
            sb.append(number[temp2[i]-'0']);
            sb.append(str1[length-i-1]);
          }
        }
        try{
          if (sb.lastIndexOf("零") == sb.length() - 1)   sb.deleteCharAt(sb.lastIndexOf("零"));
        }catch(Exception e){}
      }
    }
      

  13.   

    C:\Documents and Settings\Administrator\桌面>java a
    120100101
    壹亿贰千零壹十萬壹百零壹
    1

    223
    贰百贰十叁
    102
    壹百零贰
    1000
    壹千
    1263
    壹千贰百陆十叁
    123021
    壹十贰萬叁千零贰十壹
    100001
    壹十萬零壹
      

  14.   

    我发现我那个有点小错误,这样就对了
    import java.io.*;
    public class a
    {
       public static void main(String[] args)
       {
         String s=new String();
         BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
         
         while(true)
         {
            try{s=br.readLine();}catch(Exception e){}
           Convert c = new Convert(s.toCharArray());
           System.out.println(c);
         }
       }
    }
    class Convert
    {
      final String[] str1={"","十","百","千"};
      final String[] str2 = {"亿","萬"};
      final String[] number = {"","壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
      char[] num_char;
      StringBuffer sb=new StringBuffer();
      int last;  public Convert(char[] num)
      {
        num_char=num;
      }
      public String toString()
      {
        last=num_char.length%4;
        int pos=0;
        add(sb,new String(num_char,0,last));
        pos+=last;
        for(int i=(int) (num_char.length/4);i>0;i--)
        {
          if(i%2==0) sb.append(str2[0]);
          else sb.append(str2[1]);
          add(sb,new String(num_char,pos,4));
          pos+=4;
        }
        if(last==0) sb.deleteCharAt(0);
        return sb.toString();
      }
      private void add(StringBuffer sb,String temp)
      {
        char[] temp2=temp.toCharArray();
        int length=temp.length();
        for(int i=0;i<length;i++)
        {
          if(temp2[i]=='0') 
            if(sb.lastIndexOf("零")!=sb.length()-1 && last!=0) sb.append("零");else;
          else
          {
            sb.append(number[temp2[i]-'0']);
            sb.append(str1[length-i-1]);
          }
        }
        try{
          if (sb.lastIndexOf("零") == sb.length() - 1)   sb.deleteCharAt(sb.lastIndexOf("零"));
        }catch(Exception e){}
      }
    }结果是这样的:
    120100101
    壹亿贰千零壹十萬零壹百零壹
    20100101
    贰千壹十萬壹百壹
    1234567894564513213
    壹百贰十叁亿肆千伍百陆十柒萬捌千玖百肆十伍亿陆千肆百伍十壹萬叁千贰百壹十叁
    121202013210301005401650540321013
    壹亿贰千壹百贰十萬贰千零壹十叁亿贰千壹百零叁萬零壹百亿伍千肆百零壹萬陆千伍百零伍
    亿肆千零叁十贰萬壹千零壹十叁
    2121254548545
    贰萬壹千贰百壹十贰亿伍千肆百伍十肆萬捌千伍百肆十伍
    1

    123
    壹百贰十叁
    100
    壹百
      

  15.   

    自认为无懈可击,愿高人测试。
    受到dracularking的启发,谨表示谢意,愿与大家共享思路。public class RMBConvert {
    private static String[] faceVal = new String[] { "零", "壹", "贰", "叁", "肆",
    "伍", "陆", "柒", "捌", "玖" }; private static String[] level = new String[] { "圆", "拾", "佰", "仟", "萬", "亿" }; public static void main(String[] arg) {
    StringBuffer sb = new StringBuffer();
    try {
    BufferedReader in = new BufferedReader(new InputStreamReader(
    System.in));
    String s1 = in.readLine();
    for (int i = 0; i < s1.length(); i++) {
    int digit = Integer.valueOf(s1.substring(i, i + 1)).intValue();
    sb.append(faceVal[digit]);
    }
    String face = sb.reverse().toString();
    StringBuffer resultSb = new StringBuffer();
    for (int i = 0; i < face.length(); i++) {
    //加权
    if (i == 0) {
    resultSb.append(level[0]);

    else{
    //万位处理
    if ((i + 4) % 8 == 0) {
    resultSb.append(level[4]);

    //亿位处理
    else if (i % 8 == 0) {
    resultSb.append(level[5]);

    else {
    resultSb.append(level[i % 4]);
    }
    }
    //加面值
    String temp = face.substring(i, i + 1);
    resultSb.append(temp);
    } String result = resultSb.reverse().toString();


    result = result.replaceAll("零拾", "零");
    result = result.replaceAll("零佰", "零");
    result = result.replaceAll("零仟", "零");

    result = result.replaceAll("[零]+", "零");

    result = result.replaceAll("零圆", "圆");
    result = result.replaceAll("零萬", "萬");
    result = result.replaceAll("零亿", "亿");    

    System.out.println(result + "整");
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    }
      

  16.   

    public class Test {
    /**
     * description 根据人民币的数字转化成中文的大写形式
     * 
     * @param String
     *            type 人民币数字
     * @return String 大写形式的字符串
     * @author date: 2002-10-20
     */
    public String getChineseMoney(String moneyNum) {
    // 存放汉字的数组
    String[] chinese = new String[17];
    String[] money = new String[2];
    chinese[0] = "零";
    chinese[1] = "壹";
    chinese[2] = "贰";
    chinese[3] = "叁";
    chinese[4] = "肆";
    chinese[5] = "伍";
    chinese[6] = "陆";
    chinese[7] = "柒";
    chinese[8] = "捌";
    chinese[9] = "玖";
    chinese[10] = "拾";
    chinese[11] = "佰";
    chinese[12] = "仟";
    chinese[13] = "万";
    chinese[14] = "亿";
    chinese[15] = "元";
    chinese[16] = "整";
    money[0] = "角";
    money[1] = "分";
    // 输出的大写形式字符串
    String str_out = "";
    // 整数部分字符串
    String str_left = "";
    // 小数部分字符串
    String str_right = "";
    // 小数点
    String str_point = ".";
    // 小数点位置
    int ponitLocation = moneyNum.indexOf("."); // 小数点后位数
    int pointLater = 0;
    if (ponitLocation != -1) {
    pointLater = moneyNum.length() - ponitLocation - 1;
    } else {
    pointLater = moneyNum.length();
    } // 分离字符串为两部分
    if (pointLater > 1) {
    if (ponitLocation != -1) {
    str_left = moneyNum.substring(0, ponitLocation);
    str_right = moneyNum.substring(ponitLocation + 1,
    ponitLocation + 3);
    } else {
    str_left = moneyNum;
    } }
    // 整数部分字符串的长度
    int str_left_length;
    str_left_length = str_left.length();
    // 小数部分字符串的长度
    int str_right_length;
    str_right_length = str_right.length();
    // 整数部分的零字符标识位
    int flag = 0;
    // 小数部分的零字符标识位
    int flag_zreo = 0;
    // 开始转换整数部分
    for (int i = 0; i <= str_left.length() - 1; i++) { String str_l;
    str_l = str_left.substring(i, i + 1);
    int temp = Integer.parseInt(str_l);
    switch (temp) {
    case 1:
    str_out = str_out + chinese[1];
    break;
    case 2:
    str_out = str_out + chinese[2];
    break;
    case 3:
    str_out = str_out + chinese[3];
    break;
    case 4:
    str_out = str_out + chinese[4];
    break;
    case 5:
    str_out = str_out + chinese[5];
    break;
    case 6:
    str_out = str_out + chinese[6];
    break;
    case 7:
    str_out = str_out + chinese[7];
    break;
    case 8:
    str_out = str_out + chinese[8];
    break;
    case 9:
    str_out = str_out + chinese[9];
    break;
    }
    // 对整数部分的零的处理
    if (temp == 0) {
    flag++;
    if (str_left_length == 1) {
    str_out = str_out + chinese[15];
    }
    if (str_left_length == 9) {
    flag = 0;
    str_out = str_out + chinese[14];
    }
    if (str_left_length == 5) {
    flag = 0;
    str_out = str_out + chinese[13];
    }
    // 判断是否输出零,根据它的下一位来决定:是零则不输出,否则输出
    if (str_left_length >= 2) {
    String str_le = str_left.substring(i + 1, i + 2);
    int tem = Integer.parseInt(str_le);
    if ((flag == 1) && (tem != 0)) {
    str_out = str_out + chinese[0];
    } else {
    flag = 0;
    }
    }
    str_left_length--;
    // System.out.println(str_left_length--);
    } else {
    flag = 0;
    // 添加整数部分的单位:拾, 佰,仟 ,万,亿
    switch (str_left_length) { case 1:
    str_out = str_out + chinese[15];
    str_left_length--;
    break;
    case 2:
    str_out = str_out + chinese[10];
    str_left_length--;
    break;
    case 3:
    str_out = str_out + chinese[11];
    str_left_length--;
    break;
    case 4:
    str_out = str_out + chinese[12];
    str_left_length--;
    break;
    case 5:
    str_out = str_out + chinese[13];
    str_left_length--;
    break;
    case 6:
    str_out = str_out + chinese[10];
    str_left_length--;
    break;
    case 7:
    str_out = str_out + chinese[11];
    str_left_length--;
    break;
    case 8:
    str_out = str_out + chinese[12];
    str_left_length--;
    break;
    case 9:
    str_out = str_out + chinese[14];
    str_left_length--;
    break;
    case 10:
    str_out = str_out + chinese[10];
    str_left_length--;
    break;
    case 11:
    str_out = str_out + chinese[11];
    str_left_length--;
    break;
    case 12:
    str_out = str_out + chinese[12];
    str_left_length--;
    break;
    case 13:
    str_out = str_out + chinese[13];
    str_left_length--;
    break;
    } }
    }
    // 处理小数部分的字符串
    for (int i = 0; i <= str_right.length() - 1; i++) {
    String str_r;
    str_r = str_right.substring(i, i + 1);
    int temp1 = Integer.parseInt(str_r);
    switch (temp1) {
    case 1:
    str_out = str_out + chinese[1];
    break;
    case 2:
    str_out = str_out + chinese[2];
    break;
    case 3:
    str_out = str_out + chinese[3];
    break;
    case 4:
    str_out = str_out + chinese[4];
    break;
    case 5:
    str_out = str_out + chinese[5];
    break;
    case 6:
    str_out = str_out + chinese[6];
    break;
    case 7:
    str_out = str_out + chinese[7];
    break;
    case 8:
    str_out = str_out + chinese[8];
    break;
    case 9:
    str_out = str_out + chinese[9];
    break; }
    // 对小数部分的零的处理
    if (temp1 == 0) {
    flag_zreo++;
    if (str_right_length == 2) {
    // 判断是否输出零,根据它的下一位来决定:是零则不输出,否则输出
    String str_ri = str_right.substring(i + 1, i + 2);
    int temp = Integer.parseInt(str_ri);
    if ((flag_zreo == 1) && (temp != 0)) {
    str_out = str_out + chinese[0];
    }
    } else {
    str_out = str_out + chinese[16];
    }
    str_right_length--;
    } else {
    // 添加小数部分的角、分
    switch (str_right_length) {
    case 1:
    str_out = str_out + money[1];
    str_right_length--;
    break;
    case 2:
    str_out = str_out + money[0];
    str_right_length--;
    break;
    }
    }
    }
    return str_out;
    } public static void main(String[] a) {
    Test test = new Test();
    System.out.println(test.getChineseMoney("1050")); }}
      

  17.   

    这里
    http://blog.csdn.net/leomaya/archive/2006/12/24/1458747.aspx用C#写的
      

  18.   

    我这个也是无懈可击了.我认为.import java.io.*;
    public class a
    {
       public static void main(String[] args)
       {
         String s=new String();
         BufferedReader br = new BufferedReader(new InputStreamReader(System.in));     while(true)
         {
            try{s=br.readLine();}catch(Exception e){}
           Convert c = new Convert(s.toCharArray());
           System.out.println(c);
         }
       }
    }
    class Convert
    {
      final String[] str1={"","十","百","千"};
      final String[] str2 = {"亿","萬"};
      final String[] number = {"","壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
      char[] num_char;
      StringBuffer sb=new StringBuffer();
      int last;  public Convert(char[] num)
      {
        num_char=num;
      }
      public String toString()
      {
        last=num_char.length%4;
        int pos=0;
        add(sb,new String(num_char,0,last));
        pos+=last;
        for(int i=(int) (num_char.length/4);i>0;i--)
        {
          if(i%2==0) sb.append(str2[0]);
          else sb.append(str2[1]);
          add(sb,new String(num_char,pos,4));
          pos+=4;
        }
        if(last==0) sb.deleteCharAt(0);
        return sb.toString();
      }
      private void add(StringBuffer sb,String temp)
      {
        char[] temp2=temp.toCharArray();
        int length=temp.length();
        for(int i=0;i<length;i++)
        {
          if(temp2[i]=='0')
            if(sb.lastIndexOf("零")!=sb.length()-1 && sb.length()!=0) sb.append("零");else;
          else
          {
            sb.append(number[temp2[i]-'0']);
            sb.append(str1[length-i-1]);
          }
        }
        try{
          if (sb.lastIndexOf("零") == sb.length() - 1)   sb.deleteCharAt(sb.lastIndexOf("零"));
        }catch(Exception e){}
      }
    }运行结果为:
    1

    10
    壹十
    100
    壹百
    1000
    壹千
    10000
    壹萬
    10000000
    壹千萬
    102351225
    壹亿零贰百叁十伍萬壹千贰百贰十伍
    10250250210210
    壹十萬贰千伍百零贰亿伍千零贰十壹萬零贰百壹十
    32135400213501232450123256903284230040
    叁十贰萬壹千叁百伍十肆亿零贰十壹萬叁千伍百零壹亿贰千叁百贰十肆萬伍千零壹十贰亿叁
    千贰百伍十陆萬玖千零叁十贰亿捌千肆百贰十叁萬零肆十
      

  19.   

    你们彪悍的阿写这么多不怕时间不够用吗,纸头不够写吗。接分
    static String t1 = "零壹贰叁肆伍陆柒捌玖"; static char[] n = { '仟', ' ', '拾', '佰' }; static char[] n1 = {'萬','亿'}; static char end = '圆';
    public static void print(String value, int pos, boolean b) {
    if (pos == 0) {
    System.out.print(end);
    return;
    }
    String value2 = value.substring(1, value.length());
    int printPos = value.charAt(0) - '0';
    if (printPos != 0) {
    if (b == true)
    System.out.print(t1.charAt(0));
    System.out.print(t1.charAt(printPos));
    System.out.print(printPos == 0 ? "" : (n[pos % 4] == ' ' ? "": n[pos % 4]));
    }
    if (pos % 4 == 1 && pos > 1) {
    System.out.print(n1[(pos / 4) - 1]);
    print(value2, pos - 1,  false);
    return;
    }
    print(value2, pos - 1, printPos == 0 ? true : false);
    }使用方法
    print("10010202070", 11, false);
      

  20.   

    我去笔试时也遇到这题,开始以为很简单,但过后才发现困难重重,主要是在0的处理上。回家后整整用了几个钟的时间才写出正确的程序(笔试时只有一个钟时间!):
    #include <stdio.h>
    #include <iostream.h>
    #include <string.h>
    #include <stdlib.h>
    #define MAX 0xffff 
    void main()
    {
    char *temp1[] = {"","十","百","千"};
    char *temp2[] = {"零","一","二","三","四","五","六","七","八","九"};
    enum {N,SHI,BAI,QIAN,WAN,YI};
    char input[MAX]; 
    char cache[MAX];
    char cache1[MAX];
    bool zero=false;
    int leng,i,prevMax;
    cin>>input;
    leng = strlen(input)-1;
    for(i=0;i<MAX && i<=leng;i++)
    {
    cache[i]=input[i];
    if((leng-i)%4)
    cache1[i]=(leng-i)%4;
    else if(leng-i>4 && !((leng-i)%8))
    cache1[i]=YI;
    else if(leng-i!=0)
    cache1[i]=WAN;
    else
    cache1[i]=N;
    }
    cache[i]=cache1[i]=0; for(i=0;cache[i]=='0';i++);
    while(1)
    {
    if(cache[i]!='0')
    {
    prevMax=cache1[i];
    if(cache[i]==0)
    break;
    if(zero==true)
    cout<<temp2[0];
    cout<<temp2[cache[i]-0x30];
    if(cache1[i]<4)
    cout<<temp1[cache1[i]];
    else if(cache1[i]==WAN)
    cout<<"万";
    else if(cache1[i]==YI)
    cout<<"亿";
    zero=false;
    }
    else
    {
    zero=true;
    if(cache1[i]>prevMax || cache1[i]==YI)
    {
    prevMax=cache1[i];
    if(cache1[i]<4)
    cout<<temp1[cache1[i]];
    else if(cache1[i]==4)
    cout<<"万";
    else
    cout<<"亿";
    }
    }
    i++;
    }
    cout<<endl;
    }
      

  21.   

    import java.util.Scanner;public class NumToChinese { public static void ToChinese(Long num) {
    String n[] = {"零","壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
    String unit[] = { "",  "拾" , "佰","仟"};
    String unit1[] = { "亿", "万" };
    StringBuilder chi = new StringBuilder(); for (int i = 0; i < num.toString().length(); i++) {
    chi.append(n[Integer.parseInt(String.valueOf(num.toString().charAt(i)))]);
    chi.append(unit[(num.toString().length()-i-1) % 4]);  
    if ((num.toString().length()-i) % 4 == 1)  
    {
    chi.append(unit1[(int) Math.floor((double) (num.toString().length()-i) / 4) % 2]);
    }
    }
    String ch = chi.toString();
    ch = ch.replaceAll("零仟", "零");
    ch = ch.replaceAll("零佰", "零");
    ch = ch.replaceAll("零拾", "零");
    while(ch.indexOf("零零")>0)
    {
    ch = ch.replaceAll("零零", "零");
    }
    ch = ch.replaceAll("零万", "万");
    ch = ch.replaceAll("零亿", "亿");
    ch = ch.replaceAll("亿万", "亿");
    System.out.println(ch.substring(0, ch.length()-1));
    } public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    while(true)
    {
    long num = in.nextLong();
    if(num==0)
    {
    System.exit(0);
    }
    ToChinese(new Long(num));
    }
    }}
      

  22.   

    public class GetNumber {
      public static void main(String[] args) {
      //从命令行取得数字
        int num = Integer.parseInt(args[0]);
        int num1=num;
        int n = 0;
        while(num1 >=10) {
         num1 = num1 / 10;
         n++;
        }
        int[] nums = new int[n+1];
        num1 = num;
        for (int i = 0; i < n+1;i++) {
         nums[i]= num1 % 10;
         num1 = num1 / 10;
        }
        String[] chNum={"壹","贰","叁","肆","伍","陆","柒","捌","玖","拾"};
        String[] unit={"","拾","佰","仟","万","拾","佰","仟","亿","拾","佰","仟","万"};
        for (int i = n; i >=0;i--) {
         System.out.print(chNum[nums[i]-1]);
         System.out.print(unit[i]);
       }
     }
    }
      

  23.   

    见笑了。
    if (str.indexOf("萬零") > 0)
                str = str.replace("零萬", "萬");
            else
                str = str.replace("零萬", "零");
            str = str.replace("拾零", "拾");
            str = str.replace("零拾", "零");
            str = str.replace("零佰", "零");
            str = str.replace("零仟", "零");
            for (int i = 1; i <= 6; i++)
                str = str.replace("零零", "零");
            str = str.replace("零萬", "萬");
            str = str.replace("零亿", "亿");
            str = str.replace("零零", "零");
            str = str.replace("亿萬", "亿");
            if (str.endsWith("零")) {
                str = str.substring(0, str.length() - 1);
            }
      

  24.   

    f (str.indexOf("萬零") > 0)
                str = str.replace("零萬", "萬");
            else
                str = str.replace("零萬", "零");
    改成如下,再试试。
    if (str.indexOf("萬零") > 0)
                str = str.replace("零萬", "萬");
            else{
                
                if(str.substring(0,str.indexOf("萬")).indexOf("零仟") == -1 || str.substring(0,str.indexOf("萬")).indexOf("零佰") == -1 || str.substring(0,str.indexOf("萬")).indexOf("零拾") == -1)
                    str = str.replace("零萬", "萬");
                else
                    str = str.replace("零萬", "零");
            }
      

  25.   

    很简单啊,先转成int去掉前面的0,再跟据每一位的位置算出其单位,0不加单位,连续多个0只算一个,好像没有有难度的地方啊,太简单,懒得写代码
      

  26.   

    如下:
    public class test{
      int number[];
      String bignum[] = {"零","一","二","三","四","五","六","七","八","久"};
      String sign1[] = {"","十","百","千"};
      String sign2[] = {"圆","万","亿","兆"};
      test(String s){
        if(s.length()>sign2.length*4)
          System.exit(0);
        number = new int[s.length()];
        for(int i=0;i<s.length();i++)
          number[s.length()-1-i] = Integer.parseInt(i==s.length()-1?s.substring(i):s.substring(i,i+1));
        run();
      }
      void run(){
        String s="";
        for(int i=number.length-1;i>=0;i--){
          s+=bignum[number[i]];
          s+=i%4==0?sign2[i/4]:number[i]>0?sign1[i%4]:"";
        }
        while(s.indexOf("零零")!=-1)
          s=s.replaceFirst("零零","零");
        for(int i=0;i<sign1.length;i++)
          while(s.indexOf("零"+sign2[i])!=-1)
            s=s.replaceFirst("零"+sign2[i],sign2[i]);
        for(int i=sign2.length-1;i>0;i--)
          while(s.indexOf(sign2[i]+sign2[i-1])!=-1)
            s=s.replaceFirst(sign2[i]+sign2[i-1],sign2[i]);
        System.out.println(s);
      }
      public static void main(String args[]){
        new test(args[0]);
      }
    }
      

  27.   

    既然这样在上面的程序初始化时加一句
        s = s.replaceFirst("^0+","");
    去掉前面的0即可
      

  28.   

    我以前用BASIC编的。但受限制于解释环境,输入数字不能>=10亿。但换个环境可以继续扩容。10 DATA "零","壹","贰","叁","肆","伍","陆","柒","捌","玖"
    20 DIM NUM$(10)
    30 FOR I=0  TO 9
    40 READ A$
    50 NUM$(I)=A$
    60 NEXT 
    70 DIM UNIT$(4)
    80 UNIT$(1)="仟":UNIT$(2)="佰":UNIT$(3)="拾"
    90 DIM SC$(3)
    100 SC$(1)="亿":SC$(2)="万"
    105 LOCATE 5,1:PRINT "不超过10亿";
    110 LOCATE 1,1:INPUT "请输入一个阿拉伯数字(整)";N
    120 IF INT(N)<>N  THEN PRINT "请输入整数":GOTO 110
    125 IF N=0  THEN PRINT "零":END
    130 N$=STR$(N):L=LEN(N$)
    140 IF (L/4)=INT(L/4) THEN H=(L/4):GOTO 160
    150 IF (L/4)>1  THEN H=INT(L/4)+1  ELSE H=1
    160 DIM T$(3,4)
    170 X=3:Y=4
    180 FOR I=L  TO 1  STEP -1
    190 T$(X,Y)=MID$(N$,I,1)
    200 Y=Y-1
    210 IF Y=0  THEN Y=4:X=X-1
    220 NEXT 
    300 SH=4-H
    310 FOR A=SH  TO 3
    320 T=VAL(T$(A,1))
    330 I=1
    340 WHILE T=0
    350 I=I+1
    355 IF I=5 GOTO 470
    360 T=VAL(T$(A,I))
    370 LW=1
    380 WEND 
    390 IF A<>SH  AND H>1  AND LW=1  THEN S$="零"
    410 FOR J=I  TO 4
    420 T=VAL(T$(A,J))
    425 IF T=0  AND VAL(T$(A,J-1))=0  THEN GOTO 440
    430 S$=S$+NUM$(T)+UNIT$(J*(T<>0))
    440 NEXT 
    445 IF ?S$,3)<>"零" GOTO 460
    450 S$=LEFT$(S$,(LEN(S$)-3)):WL=1
    460 FN$=FN$+S$+SC$(A)
    465 LW=0:S$=""
    470 NEXT 
    480 PRINT FN$
      

  29.   

    谁有文曲星的话可以将上述代码转成BAS,传入文曲星。可以运行一下。
      

  30.   

    445 IF RIGHT$(S$,3)<>"零" GOTO 460
      

  31.   

    我也写了一个,个人以为位数太多也没什么意义,就做了15位的。
          另:我GOOGLE了一下,有说一兆=一万亿的,也有说一兆=一千一千亿的,我这里暂以为一兆=一万亿。代码如下:有不妥之处还请各位指正!     package numberToCn;import java.util.ArrayList;
    import java.util.List;
    import java.io.*;public class NumberToCnModify {
    List cnList = null,danweiList = null;
    StringBuffer cnStr = null;
    char[] tempStr = null;
    int charLength = 0;

       public NumberToCnModify(){
       cnList = new ArrayList();
       danweiList = new ArrayList();
       cnStr = new StringBuffer();
       }
       
       public void init(){
       cnList.add("零");
       cnList.add("壹");
       cnList.add("贰");
       cnList.add("叁");
       cnList.add("肆");
       cnList.add("伍");
       cnList.add("陆");
       cnList.add("柒");
       cnList.add("捌");
       cnList.add("玖");
       
       danweiList.add("");
       danweiList.add("拾");
       danweiList.add("佰");
       danweiList.add("仟");
       danweiList.add("万");
       danweiList.add("亿");
       danweiList.add("兆");
       }
       
       public boolean isNumber(char tempChar){
       boolean isNum = true;
       if((tempChar<'0')||(tempChar>'9')){
       System.out.println();
       System.out.println("Not Number"+tempChar);
       isNum=false;
       }
       return isNum;
       }
       
       public void getInputString(String inputStr){
       tempStr = inputStr.toCharArray();
       charLength = tempStr.length;
       if(charLength>15){
       System.out.println("The Number You Input Is Too Long!");
       System.exit(0);
       }
       }
       
       public String convertToBaseCn(int startNum,int endNum,String danwei){
       int allZero = 0;
       int tempNum = 0;
       String tempString = "";
       for(int i=startNum;i<endNum;i++){
       tempNum = Integer.parseInt(String.valueOf(tempStr[i]));
       if(i==startNum&&tempNum==0||i==startNum+1&&tempNum==0&&Integer.parseInt(String.valueOf(tempStr[i-1]))==0||i==startNum+2&&tempNum==0&&Integer.parseInt(String.valueOf(tempStr[i-1]))==0&&Integer.parseInt(String.valueOf(tempStr[i-2]))==0||i==startNum+3&&tempNum==0&&Integer.parseInt(String.valueOf(tempStr[i-1]))==0&&Integer.parseInt(String.valueOf(tempStr[i-2]))==0&&Integer.parseInt(String.valueOf(tempStr[i-3]))==0){
       if(i==startNum+3&&tempNum==0&&Integer.parseInt(String.valueOf(tempStr[i-1]))==0&&Integer.parseInt(String.valueOf(tempStr[i-2]))==0&&Integer.parseInt(String.valueOf(tempStr[i-3]))==0){
       allZero = 1;
       }
       //如果第一个是零或者1、2两个都是0或者1、2、3,1、2、3、4都是0的话,就不用打印零和相应的单位了。
       }else{
       if(i==endNum-1&&tempNum==0||i==endNum-2&&tempNum==0&&Integer.parseInt(String.valueOf(tempStr[i+1]))==0||i==endNum-3&&tempNum==0&&Integer.parseInt(String.valueOf(tempStr[i+1]))==0){
       //如果最后一个是0,某一个及其后面一个都是0的话,就不必打印0
       }else{
       tempString+=cnList.get(tempNum).toString();      
       }
       
       if(tempNum!=0){//如果是0的话,就不用打印单位
       tempString+=danweiList.get(endNum-(i+1)).toString();
       }
       
       }
       }
       
       if(allZero == 0){
       tempString+=danwei;
       }
       
       return tempString;
       }
       
       public String convertToCn(){    int notNumber = 0;
       int zeroRecord = 0;//当同时两个或多个位段都是0时,只要显示一个0
       String tempString = "";
       
    try{   
       
       for(int i=0;i<charLength;i++){
       if(!isNumber(tempStr[i])){
       notNumber = 1;
       break;
       }
       }
       
       if(notNumber == 1){
       System.out.println("Please Input Number!");
       return "";
       }else{
        if(charLength>12){
       tempString = convertToBaseCn(0,charLength-12,"兆");
       if(tempString.equals("")){
       zeroRecord ++;
       }else{
       zeroRecord = 0;
       }
       cnStr.append(tempString);
       if(zeroRecord ==1 ){
       cnStr.append("零");
       }
       
       tempString = convertToBaseCn(charLength-12,charLength-8,"亿");
       if(tempString.equals("")){
       zeroRecord ++;
       }else{
       zeroRecord = 0;
       }
       cnStr.append(tempString);
       if(zeroRecord ==1 ){
       cnStr.append("零");
       }
       
       tempString = convertToBaseCn(charLength-8,charLength-4,"万");
       if(tempString.equals("")){
       zeroRecord ++;
       }else{
       zeroRecord = 0;
       }
       cnStr.append(tempString);
       if(zeroRecord ==1 ){
       cnStr.append("零");
       }
       
       tempString=convertToBaseCn(charLength-4,charLength,"");
       if(tempString.equals("")){
       zeroRecord ++;
       }else{
       zeroRecord = 0;
       }
       cnStr.append(tempString);
       if(zeroRecord ==1 ){
       cnStr.append("零");
       }
       }else if(charLength>8){
       tempString=convertToBaseCn(0,charLength-8,"亿");
       if(tempString.equals("")){
       zeroRecord ++;
       }else{
       zeroRecord = 0;
       }
       cnStr.append(tempString);
       if(zeroRecord ==1 ){
       cnStr.append("零");
       }
       
       tempString=convertToBaseCn(charLength-8,charLength-4,"万");
       if(tempString.equals("")){
       zeroRecord ++;
       }else{
       zeroRecord = 0;
       }
       cnStr.append(tempString);
       if(zeroRecord ==1 ){
       cnStr.append("零");
       }
       
       tempString=convertToBaseCn(charLength-4,charLength,"");
       if(tempString.equals("")){
       zeroRecord ++;
       }else{
       zeroRecord = 0;
       }
       cnStr.append(tempString);
       if(zeroRecord ==1 ){
       cnStr.append("零");
       }
       }else if(charLength>4){
       tempString=convertToBaseCn(0,charLength-4,"万");
       if(tempString.equals("")){
       zeroRecord ++;
       }else{
       zeroRecord = 0;
       }
       cnStr.append(tempString);
       if(zeroRecord ==1 ){
       cnStr.append("零");
       }
       
       tempString=convertToBaseCn(charLength-4,charLength,"");
       if(tempString.equals("")){
       zeroRecord ++;
       }else{
       zeroRecord = 0;
       }
       cnStr.append(tempString);
       if(zeroRecord ==1 ){
       cnStr.append("零");
       }
       }else{
           tempString=convertToBaseCn(0,charLength,"");
           if(tempString.equals("")){
       zeroRecord ++;
       }else{
       zeroRecord = 0;
       }
       cnStr.append(tempString);
       if(zeroRecord ==1 ){
       cnStr.append("零");
       }
       }
       }
    }catch(NullPointerException ne){
    System.out.println("NullPointerException:"+ne.getMessage());
    }catch(IndexOutOfBoundsException iobe){
    System.out.println("IndexOutOfBoundsException:"+iobe.getMessage());
    }finally{

    }
       return cnStr.toString();
       }
       
       public static void main(String[] args){
       NumberToCnModify ntc = new NumberToCnModify();
       ntc.init();
       ntc.getInputString("300340000000130");
       System.out.println(ntc.convertToCn());
       }
    }
      

  32.   

    支持“000123423400000000000130”的
    import java.math.BigInteger;
    import java.util.Scanner;public class NumToChinese { public static void ToChinese(BigInteger num) {
    String n[] = {"零","壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
    String unit[] = { "",  "拾" , "佰","仟"};
    String unit1[] = { "亿", "万" };
    StringBuilder chi = new StringBuilder(); for (int i = 0; i < num.toString().length(); i++) {
    chi.append(n[Integer.parseInt(String.valueOf(num.toString().charAt(i)))]);
    chi.append(unit[(num.toString().length()-i-1) % 4]);     // 添加单位
    if ((num.toString().length()-i) % 4 == 1)                // 添加单位1
    {
    chi.append(unit1[(int) Math.floor((double) (num.toString().length()-i) / 4) % 2]);
    }
    }
    String ch = chi.toString();
    ch = ch.replaceAll("零仟", "零");
    ch = ch.replaceAll("零佰", "零");
    ch = ch.replaceAll("零拾", "零");
    while(ch.indexOf("零零")>0)
    {
    ch = ch.replaceAll("零零", "零");
    }
    ch = ch.replaceAll("零万", "万");
    ch = ch.replaceAll("零亿", "亿");
    ch = ch.replaceAll("亿万", "亿");
    System.out.println(ch.substring(0, ch.length()-1));
    } public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    while(true)
    {
    BigInteger num = in.nextBigInteger();
    if(num.equals(0))
    {
    System.exit(0);
    }
    ToChinese(num);
    }
    }
    }
      

  33.   

    ,以前用C++写过一个数字转英文大写的,不知有帮助没,代码如下://EnglishNumber.h#pragma once
    #include<string>
    #include<cassert>
    #include "ValueTraits.h"using namespace std;class EnglishNumber
    {
    public:
        EnglishNumber(){}
        ~EnglishNumber(){}
        template<typename ValueType>
            const string NumberName(const ValueType &) const;
    private:
        template<typename ValueType>
            const string BaseDigit(const ValueType &) const;
        template<typename ValueType>
            const string TensDigit(const ValueType &) const;
        template<typename ValueType>
            const string HundredsDigit(const ValueType &) const;
        template<typename ValueType>
            const string MoreDigit(const ValueType &) const;
    };template<typename ValueType>
        const string EnglishNumber::BaseDigit(const ValueType & iNumber) const{
            const static string BaseNumName[] = {"zero",
                "one","two","three","four","five","six",
                "seven","eight","nine","ten","eleven",
                "twelve","thirteen","fourteen","fifteen",
                "sixteen","seventeen","eighteen","nineteen"};
            assert(iNumber >= 0 && iNumber < 20 && "Function BaseNumber");
            return BaseNumName[ValueTraits<ValueType>::Long(iNumber)];
        }template<typename ValueType>
        const string EnglishNumber::TensDigit(const ValueType & iNumber) const{
            const static string TensDigitName[] = {
                "twenty","thirty","forty","fifty",
                "sixty","seventy","eighty","ninety"};
            assert(iNumber >= 0 && iNumber < 100 && "Function TensDigit");
            if(iNumber < 20)
                return BaseDigit(iNumber);
            ValueType h(iNumber),l(iNumber);
            h = iNumber / 10;
            l = iNumber % 10;
            if(0 == l)
                return TensDigitName[ValueTraits<ValueType>::Long(h) - 2];
            return TensDigitName[ValueTraits<ValueType>::Long(h) - 2] + "-" + BaseDigit(l);
        }template<typename ValueType>
        const string EnglishNumber::HundredsDigit(const ValueType & iNumber) const{
            assert(iNumber >= 0 && iNumber < 1000 && "Function HundredsDigit");
            if(iNumber < 100)
                return TensDigit(iNumber);
            ValueType h,l;
            h = iNumber / 100;
            l = iNumber % 100;
            if(0 == l)
                return BaseDigit(h) + " hundred";
            return BaseDigit(h) + " hundred and " + TensDigit(l);
        }template<typename ValueType>
        const string EnglishNumber::MoreDigit(const ValueType & iNumber) const{
            const static string MoreName[] = {"thousand","million","billion"};
            assert(iNumber >= 0 && "Function MoreNumber");
            if(iNumber < 1000)
                return HundredsDigit(iNumber);
            ValueType n;
            n = iNumber % 1000;
            string result;
            if(0 != n)
                result = HundredsDigit(n);
            n = iNumber / 1000;
            int i = 0;
            do{
                ValueType l = n % 1000;
                n /= 1000;
                if(0 != l)
                    if(0 == result.size())
                        result = HundredsDigit(l) + " " + MoreName[i];
                    else
                        result = HundredsDigit(l) + " " + MoreName[i] + ", " + result;
            }while(n > 0 && ++i < 3);
            if(n > 0)
                if(0 == result.size())
                    result = MoreDigit(n) + " trillion";
                else
                    result = MoreDigit(n) + " trillion, " + result;
            return result;
        }template<typename ValueType>
        const string EnglishNumber::NumberName(const ValueType & iNumber) const{
            if(iNumber < 0)
                return "minus " + MoreDigit(-iNumber);
            return MoreDigit(iNumber);
        }//ValueTraits.h#pragma oncetemplate<typename T>struct ValueTraits
    {
    static long Long(const T & v)
    {
    return v;
    }
    };
      

  34.   

    .Net/C#/VB/T-SQL/Java/Script 实现: 将天文数字转换成中文大写 (2000 年前的思路,打劫的,一点儿技术含量都没有) 
    http://www.cnblogs.com/Microshaoft/archive/2005/04/02/131008.html
    public class Class1 

        public static String ConvertNumberToChinese(String x, String[] Nums, String[] Digits, String[] Units) 
        { 
            String S = ""; //返回值 
            int p = 0; //字符位置指针 
            int m = x.length() % 4; //取模 
     
            // 四位一组得到组数 
            int k = (m > 0 ? x.length() / 4 + 1 : x.length() / 4); 
     
            // 外层循环在所有组中循环 
            // 从左到右 高位到低位 四位一组 逐组处理 
            // 每组最后加上一个单位: "[万亿]","[亿]","[万]" 
            for (int i = k; i > 0; i--) 
            { 
                int L = 4; 
                if (i == k && m != 0) 
                { 
                    L = m; 
                } 
                // 得到一组四位数 最高位组有可能不足四位 
                String s = x.substring(p, p + L); 
                int l = s.length(); 
     
                // 内层循环在该组中的每一位数上循环 从左到右 高位到低位 
                for (int j = 0; j < l; j++) 
                { 
                    //处理改组中的每一位数加上所在位: "仟","佰","拾",""(个) 
                    int n = java.lang.Integer.parseInt(s.substring(j, j+1)); 
                    if (n == 0) 
                    { 
                        if ((j < l - 1) 
                            && (java.lang.Integer.parseInt(s.substring(j + 1, j + 1+ 1)) > 0) //后一位(右低) 
                            && !S.endsWith(Nums[n])) 
                        { 
                            S += Nums[n]; 
                        } 
                    } 
                    else 
                    { 
                        //处理 1013 一千零"十三", 1113 一千一百"一十三" 
                        if (!(n == 1 && (S.endsWith(Nums[0]) | S.length() == 0) && j == l - 2)) 
                        { 
                            S += Nums[n]; 
                        } 
                        S +=  Digits[l - j - 1]; 
                    } 
                } 
                p += L; 
                // 每组最后加上一个单位: [万],[亿] 等 
                if (i < k) //不是最高位的一组 
                { 
                    if (java.lang.Integer.parseInt(s) != 0) 
                    { 
                        //如果所有 4 位不全是 0 则加上单位 [万],[亿] 等 
                        S += Units[i - 1]; 
                    } 
                } 
                else 
                { 
                    //处理最高位的一组,最后必须加上单位 
                    S += Units[i - 1]; 
                } 
            } 
            return S; 
        } 
     
        // 测试程序 
        public static void main(String[] args) throws Exception 
        { 
            //数字 数组 
            String[] Nums = new String[] {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"}; 
            //位 数组 
            String[] Digits = new String[] {"", "拾", "佰", "仟"}; 
            //单位 数组 
            String[] Units = new String[] {"", "[万]", "[亿]", "[万亿]"}; 
     
            System.out.println(ConvertNumberToChinese("111112100113", Nums, Digits, Units)); 
            System.out.println(ConvertNumberToChinese("1100000000", Nums, Digits, Units)); 
            System.out.println(ConvertNumberToChinese("1000000000", Nums, Digits, Units)); 
            System.out.println(ConvertNumberToChinese("40000000013", Nums, Digits, Units)); 
            System.out.println(ConvertNumberToChinese("40000000001", Nums, Digits, Units)); 
            System.out.println(ConvertNumberToChinese("400000010000", Nums, Digits, Units)); 
            System.out.println(ConvertNumberToChinese("40101031013", Nums, Digits, Units)); 
            System.out.println(ConvertNumberToChinese("40101031113", Nums, Digits, Units)); 
            System.out.println(ConvertNumberToChinese("101140101031013", Nums, Digits, Units)); 
            System.out.println(ConvertNumberToChinese("100000001000013", Nums, Digits, Units)); 
            System.out.println(ConvertNumberToChinese("100000001000113", Nums, Digits, Units)); 
            System.out.println(ConvertNumberToChinese("100011003", Nums, Digits, Units)); 
            System.out.println(ConvertNumberToChinese("10010103", Nums, Digits, Units)); 
            System.out.println(ConvertNumberToChinese("10110013", Nums, Digits, Units)); 
            System.out.println(ConvertNumberToChinese("130000", Nums, Digits, Units)); 
     
            //System.in.read(); 
        } 

      

  35.   

    public class test {
    public static void main(String[] arg) throws IOException {
    String d="拾佰仟万拾佰仟亿拾佰仟万";
    String s="零壹贰叁肆伍陆柒捌玖";
    boolean zero=false;
    int value=1101111001, count=0;
    String Cvalue="";
    while(value>0) {
    int b=value-value/10*10;
    if(!zero || b!=0) {
    String t="";
    if(b!=0) {
    t=s.substring(b,b+1);
    if(count>0) t+=d.substring(count-1,count);
    zero=false;
    }
    else {
    t="零";
    zero=true;
    }
    Cvalue=t+Cvalue;
    }
    count++;
    value/=10;
    }

    System.out.println(Cvalue);
    }
    }
      

  36.   

    还有些问题,修正一下:
    public class test {
    public static void main(String[] arg) throws IOException {
    String d="拾佰仟万拾佰仟亿拾佰仟万";
    String s="零壹贰叁肆伍陆柒捌玖";
    boolean zero=false;
    int value=2021000789, count=0;
    String Cvalue="";
    while(value>0) {
    int b=value-value/10*10;
    if(!zero || b!=0) {
    String t="";
    if(b!=0) {
    t=s.substring(b,b+1);
    if(count>0) t+=d.substring(count-1,count);
    zero=false;
    }
    else if(count!=4 && count!=8){
    t="零";
    zero=true;
    }
    Cvalue=t+Cvalue;
    }
    if(count==4 && !Cvalue.contains("万")) Cvalue="万"+Cvalue;
    if(count==8 && !Cvalue.contains("亿")) Cvalue="亿"+Cvalue;
    count++;
    value/=10;
    }
    System.out.println(Cvalue);
    }
    }
      

  37.   

    搞了一下,
    试验下,效果不错的.
    ----------------------------------------------
    package com;import java.io.*;/**
     * @author cct
     */
    public class a 
    {
    public static void main(String[] args) 
    {
    String s = new String();
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); while (true) 
    {
    try 
    {
    System.out.println("请输入数字:并回车");
    s = br.readLine(); Convert c = new Convert(s.toCharArray());
    System.out.println(c);

    catch (Exception e) 
    {
    }
    }
    }
    }/**
     * @author cct
     */
    class Convert 
    {
    final String[] str1 = { "", "拾", "百", "千" }; final String[] str2 = { "亿", "萬" }; final String[] number = { "", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" }; char[] num_char; StringBuffer sb = new StringBuffer(); int last; public Convert(char[] num) 
    {
    num_char = num;
    } public String toString() 
    {
    last = num_char.length % 4;
    int pos = 0;
    add(sb, new String(num_char, 0, last));
    pos += last;
    for (int i = (int) (num_char.length / 4); i > 0; i--) 
    {
    if (i % 2 == 0)
    sb.append(str2[0]);
    else
    sb.append(str2[1]);
    add(sb, new String(num_char, pos, 4));
    pos += 4;
    }
    if (last == 0)
    sb.deleteCharAt(0);
    return sb.toString();
    } /**
     * @param sb
     * @param temp
     */
    private void add(StringBuffer sb, String temp) 
    {
    char[] temp2 = temp.toCharArray();
    int length = temp.length();
    for (int i = 0; i < length; i++) 
    {
    if (temp2[i] == '0')
    if (sb.lastIndexOf("零") != sb.length() - 1 && last != 0)
    sb.append("零");
    else
    ;
    else 
    {
    sb.append(number[temp2[i] - '0']);
    sb.append(str1[length - i - 1]);
    }
    }
    try 
    {
    if (sb.lastIndexOf("零") == sb.length() - 1)
    sb.deleteCharAt(sb.lastIndexOf("零"));

    catch (Exception e) 
    {
    }
    }
    }
      

  38.   

    中午没事做了一下,这样应该没有什么问题了吧,如果有请提出,大家共勉
    import java.io.*;
    import java.util.*;
    /**
       将输入的数字用中文表示出来
     */public class NumberTest
    {
    private char ch;
    private String[] charOfNum = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
    private String[] shibq = {"","拾","佰","仟"};
    private String[] wany = {"个","萬","亿","萬","亿","萬","亿"}; String inputStringNum()
    //从键盘输入有效数字
    {   
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String string = null;
        try
        {
           string = reader.readLine();
        }catch(IOException ex)
        {
         System.err.println(ex.getMessage());
        }
        return stringReverse(disinfectZero(string));
    }

    private String disinfectZero(String string)
    //将输入数字有效位前面的零清除
    {
    int length = string.length();
    int i = 0;
    String stringReturn = string;
    if(Long.parseLong(string) == 0L)
    {
    stringReturn = "0";
    }
    else
    {
    while(string.charAt(i++) == '0')
    {
    stringReturn = string.substring(i,length);
    }
    }
    return stringReturn;
    }

    private String stringReverse(String string)
    //将输入的数字倒序排列
    {
    int length = string.length();
    String stringReturn = "";
    for(int i = 0;i<length;i++)
    {
        ch = string.charAt(i);
        stringReturn = ch+stringReturn;
    }

    return stringReturn;
    }

    public String change()
    {  
       String string = inputStringNum();//获取输入数据
       String resultStr;
       String resultString = "";//保存结果
       
       if(Long.parseLong(string) == 0L)
       {
          resultString = "零";
       }
       else
       {
           
       //将数据分为四个一组
       int length = string.length();
       int intoffour = length/4;
           if((length%4) != 0)
       {
       intoffour+=1;
       }
       
      //将数据分组存放到字符串数组中,再分别转化
       String stringnum[] = new String[intoffour];
       for(int i = 0;i<intoffour-1;i++)
       {
       stringnum[i] = string.substring(i*4,(i+1)*4);
       }
       stringnum[intoffour-1] = string.substring((intoffour-1)*4,length);
       
       //获得完整的表达
       for(int i = 0;i<intoffour;i++)
       {  
       resultStr = "";
       for(int j = 0;j<stringnum[i].length();j++)
       {
       ch = stringnum[i].charAt(j);
       String str = ""+ch;
       int charAt = Integer.parseInt(str);
       //if(charAt != 0)
       //{
          resultStr = charOfNum[charAt]+shibq[j]+resultStr;
       //}
       }
       if(Integer.parseInt(stringnum[i]) != 0)
       {
            resultString = resultStr+wany[i]+resultString;   
       }
       else
       {
          resultString = "零"+resultString;
       }
       }
       }
       resultString = resultString.replaceAll("零拾", "零");
           resultString = resultString.replaceAll("零佰", "零");
           resultString = resultString.replaceAll("零仟", "零");
       resultString = resultString.replaceAll("[零]+", "零");
       resultString = resultString.replaceAll("零个","");
       resultString = resultString.replaceAll("零萬", "萬");
           resultString = resultString.replaceAll("零亿", "亿");
       return resultString;
    }

    public static void main(String[] args) throws Exception
    {
    NumberTest test = new NumberTest();
            System.out.println(test.change());
        }
    }
      

  39.   

    wenchaohu213(夏吾) 楼上两层
    你输入0000002 看一下结果是什么?
      

  40.   

    这下更好了
    import java.io.*;
    import java.util.*;
    /**
       将输入的数字用中文表示出来
     */public class NumberTest
    {
    private char ch;
    private String[] charOfNum = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
    private String[] shibq = {"","拾","佰","仟"};
    private String[] wany = {"个","萬","亿","萬","亿","萬","亿"};
    public String exit = null; String inputStringNum()
    //从键盘输入有效数字
    {   
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String string = null;
        try
        {
           string = reader.readLine();
        }catch(IOException ex)
        {
         System.err.println(ex.getMessage());
        }
        if(string.equals("exit"))
        {
         System.exit(0);
        }
        return stringReverse(disinfectZero(string));
    }

    private String disinfectZero(String string)
    //将输入数字有效位前面的零清除
    {
    int length = string.length();
    int i = 0;
    String stringReturn = string;
    if(Long.parseLong(string) == 0L)
    {
    stringReturn = "0";
    }
    else
    {
    while(string.charAt(i++) == '0')
    {
    stringReturn = string.substring(i,length);
    }
    }
    return stringReturn;
    }

    private String stringReverse(String string)
    //将输入的数字倒序排列
    {
    int length = string.length();
    String stringReturn = "";
    for(int i = 0;i<length;i++)
    {
        ch = string.charAt(i);
        stringReturn = ch+stringReturn;
    }

    return stringReturn;
    }

    public String change()
    //将数字转化为文字表达
    {  
       String string = inputStringNum();//获取输入数据
       String resultStr;
       String resultString = "";//保存结果
       
       if(Long.parseLong(string) == 0L)
       {
          resultString = "零";
       }
       else
       {
           
       //将数据分为四个一组
       int length = string.length();
       int intoffour = length/4;
           if((length%4) != 0)
       {
       intoffour+=1;
       }
       
      //将数据分组存放到字符串数组中,再分别转化
       String stringnum[] = new String[intoffour];
       for(int i = 0;i<intoffour-1;i++)
       {
       stringnum[i] = string.substring(i*4,(i+1)*4);
       }
       stringnum[intoffour-1] = string.substring((intoffour-1)*4,length);
       
       //获得完整的表达
       for(int i = 0;i<intoffour;i++)
       {  
       resultStr = "";
       for(int j = 0;j<stringnum[i].length();j++)
       {
       ch = stringnum[i].charAt(j);
       String str = ""+ch;
       int charAt = Integer.parseInt(str);
       resultStr = charOfNum[charAt]+shibq[j]+resultStr;
       }
       if(Integer.parseInt(stringnum[i]) != 0)
       {
            resultString = resultStr+wany[i]+resultString;   
       }
       else
       {
          resultString = "零"+resultString;
       }
       }
       }
       resultString = resultString.replaceAll("零拾", "零");
           resultString = resultString.replaceAll("零佰", "零");
           resultString = resultString.replaceAll("零仟", "零");
       resultString = resultString.replaceAll("[零]+", "零");
       resultString = resultString.replaceAll("零个","");
       resultString = resultString.replaceAll("个","");
       resultString = resultString.replaceAll("零萬", "萬");
           resultString = resultString.replaceAll("零亿", "亿");
       return resultString;
    }

    public static void main(String[] args) throws Exception
    {
    NumberTest test = new NumberTest();
    System.out.println("请输入数字并回车,若要退出请输入exit");
    while(true)
    {
    System.out.println(test.change());
    }
            
        }
    }
      

  41.   

    利用自动机理论来做。将数分成4位的节(Section).
    public class RMBConvert
    {
    public RMBConvert()
    {

    } private static string[] faceVal = new String[] { "零", "壹", "贰", "叁", "肆",
       "伍", "陆", "柒", "捌", "玖" }; private static string []unit = new string[]{"仟","佰","拾",""}; private static string[] level = new String[] { "圆", "拾", "佰", "仟", "萬", "亿" }; public string Convert(string rmb)
    {
    int len = 0;
    string ret = "";
    string tmpY = "";
    string tmpW = "";
    string tmpG = "";
    bool bFlag = false;
    if(rmb.Length > 8)
    rmb = rmb.PadLeft(12, '0');
    else if(rmb.Length > 4)
    rmb = rmb.PadLeft(8, '0');
    else rmb = rmb.PadLeft(4, '0'); if(rmb.Length > 8)
    {
    tmpY = ConvertSection(rmb, 0, 4, false);
    if(tmpY != "零")
    {
    ret += tmpY + "亿";
    bFlag = true;
    }
    tmpW = ConvertSection(rmb, 4, 4, bFlag);
    if(tmpW != "零")
    {
    ret += tmpW + "万";
    bFlag = true;
    }
    tmpG = ConvertSection(rmb, 8, 4, bFlag);
    if(tmpG != "零")
    ret += tmpG;
    else{
    if(tmpY == "零" && tmpW == "零" && tmpG == "零")
    ret = "零";
    }
    }
    else if(rmb.Length > 4)
    {
    tmpW = ConvertSection(rmb, 0, 4, false);
    if(tmpW != "零")
    {
    ret += tmpW + "万";
    bFlag = true;
    }
    tmpG = ConvertSection(rmb, 4, 4, bFlag);
    if(tmpG != "零")
    {
    ret += tmpG;
    }
    else

    if(tmpW == "零")
    ret = "零";
    }
    }
    else{
    ret = ConvertSection(rmb, 0, 4, false);
    }
    return ret;
    } public string ConvertSection(string value, int start, int len, bool headerZero)
    {
    return ConvertSection(value.Substring(start, len), headerZero);
    } public string ConvertSection(string value)
    {
    return ConvertSection(value, false);
    }
    /// <summary>
    /// 主要看这个了
    /// </summary>
    /// <param name="value"></param>
    /// <param name="headerZero"></param>
    /// <returns></returns>
    public string ConvertSection(string value, bool headerZero)
    {
    string regVal = value.PadLeft(4, '0');
    string strOutput = ""; int state = 0;
    for(int i=0; i<4;i++)
    {
    int crr = regVal[i] - 0x30;
    switch(state)
    {
    case 0:
    if( crr == 0 )
    {
    state = 1;
    }
    else{
    state = 2;
    strOutput += faceVal[crr] + unit[i];
    }
    break;
    case 1:
    if( crr == 0 )
    {
    state = 3;
    }
    else
    {
    state = 5;
    if( headerZero )
    strOutput += "零";
    strOutput +=  faceVal[crr] + unit[i];
    }
    break;
    case 2:
    if( crr == 0 )
    {
    state = 4;
    }
    else
    {
    state = 5;
    strOutput += faceVal[crr] + unit[i];
    }
    break;
    case 3:
    if( crr == 0 )
    {
    state = 11;
    }
    else
    {
    state = 6;
    if( headerZero )
    strOutput += "零";
    strOutput += faceVal[crr] + unit[i];
    }
    break;
    case 4:
    if( crr == 0 )
    {
    state = 7;
    }
    else
    {
    state = 6;
    strOutput += "零" + faceVal[crr] + unit[i];
    }
    break;
    case 5:
    if( crr == 0 )
    {
    state = 7;
    }
    else
    {
    state = 6;
    strOutput += faceVal[crr] + unit[i];
    }
    break;
    case 6:
    if( crr == 0 )
    {
    state = 8;
    }
    else
    {
    state = 9;
    strOutput += faceVal[crr] + unit[i];
    }
    break;
    case 7:
    if( crr == 0 )
    {
    state = 10;
    }
    else
    {
    state = 9;
    strOutput += "零" + faceVal[crr] + unit[i];
    }
    break;
    case 11:
    if( crr == 0 )
    {
    state = 12;
    strOutput = "零";
    }
    else
    {
    state = 13;
    if( headerZero )
    strOutput += "零";
    strOutput += faceVal[crr] + unit[i];
    }
    break;
    case 8:break;
    case 9:break;
    case 10:break;
    case 12:break;
    case 13:break;
    } // end of switch
    } // end of for
    return strOutput;
    }
    }
      

  42.   

    package test;public class Money {
    private static String[] UNIT = { "圆", "拾", "佰", "仟", "万", "拾", "佰", "仟",
    "亿", "拾", "佰", "仟" }; private static String[] CHINESE_NUMBER = { "零", "壹", "贰", "叁", "肆", "伍",
    "陆", "柒", "捌", "玖" }; private static String NUMBER = "0123456789"; public static void main(String[] args) {
    long amount = 100000006543L;
    String result = formatMoney(amount);
    System.out.print(result);
    } public static String formatMoney(long amount) {
    String money = Long.toString(amount);
    String result = "";
    char letter;
    boolean hasZero = false;
    final int count = money.length();
    for (int i = 0; i < count; i++) {
    letter = money.charAt(i);
    if (letter == '0') {
    hasZero = true;
    if (count - 1 - i == 0) {
    result += "圆";
    }
    if (count - 1 - i == 4 && !result.endsWith("亿")) {
    result += "万";
    hasZero = false;
    }
    if (count - 1 - i == 8) {
    result += "亿";
    hasZero = false;
    }
    } else {
    if (hasZero) {
    result += "零" + CHINESE_NUMBER[NUMBER.indexOf(letter)]
    + UNIT[count - 1 - i];
    } else {
    result += CHINESE_NUMBER[NUMBER.indexOf(letter)]
    + UNIT[count - 1 - i];
    }
    hasZero = false;
    }
    }
    return result;
    }
    }
      

  43.   

    其实实现的原理很简单,开始也想错了!
    就是以八位为区分,超过八位后只不过增加了个亿罢了,在八位以前都是一样的,所以程序实现就是以八位为节点,先算出每个八位的数值,再不是第一个八位(从右边数),每增加一个八位就增加一个亿字就可以了!
    具体实现如下:(以下是DELPHI实现)
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, Buttons, ExtCtrls;type
      TForm1 = class(TForm)
        LedtNum: TLabeledEdit;
        BitBtn1: TBitBtn;
        ComboBox1: TComboBox;
        memo: TMemo;
        procedure BitBtn1Click(Sender: TObject);
      private
        { Private declarations }
        procedure ConvertNumber(value: string);
      public
        { Public declarations }
      end;const
      ROWMAX = 2; //最大的编号
      COLMAX = 3;  U_NUM: array[0..9] of string = ('零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖');
      U_LEV: array[0..ROWMAX, 0..COLMAX] of string = (('', '拾', '佰', '仟'),
                                                      ('', '', '', '萬'),
                                                      ('', '', '', '亿')
                                                     );
      {
       其实实现的原理很简单,开始也想错了!
       就是以八位为区分,超过八位后只不过增加了个亿罢了,在八位以前都是一样的,
       所以程序实现就是以八位为节点,先算出每个八位的数值,再不是第一个八位(从右边数),
       每增加一个八位就增加一个亿字就可以了!
    具体实现如下:
      }
    var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.BitBtn1Click(Sender: TObject);
    begin
      ConvertNumber(LedtNum.Text);
    end;procedure TForm1.ConvertNumber(value: string);
    var
      i, i2, i3: integer;
      tmpD, tmpM: integer;//整数部分及小数部分
      tmpStrs: array of string;
      tmpLst: TStringList;
      tmpStr, tmpStr1: string;  function getStr(aValue: string): string;
      var
        tmpS2: string;
      begin
        result := '';
        i := length(aValue);
        while i>0 do
        begin
          i2 := length(aValue)-i+1;
          if aValue[i] <>'0' then
          begin
            tmpD := (i2-1) div 4;
            tmpM := (i2-1) mod 4;        tmpS2 := '';
            if tmpD > 0 then
            begin
              if (tmpD>0) and (tmpD<=2) then
              begin
                if AnsiPos(U_LEV[tmpD, COLMAX], result)>0 then
                  tmpS2 := U_LEV[0, tmpM]
                else
                  tmpS2 := U_LEV[0, tmpM]+U_LEV[tmpD, COLMAX];
              end;
              result := aValue[i]+tmpS2+result;
            end else begin
              result := aValue[i]+U_LEV[tmpD, tmpM]+result;
            end;      end else result := aValue[i]+result;      dec(i);
        end;
      end;begin
      tmpLst := TStringList.Create;
      try
        while (length(value) > 0) do
        begin
          if length(value)< 8 then
          begin
            tmpLst.Add(value);
            break;
          end else begin
            tmplst.Add(copy(value, length(value)-8+1, 8));
            value := copy(value, 1, length(value)-8);
          end;
        end;    setLength(tmpStrs, tmpLst.Count);    for i3 := 0 to tmpLst.Count-1 do
        begin
          tmpStrs[i3] := getStr(tmpLst.Strings[i3]);
          for i := 1 to i3 do
            tmpStrs[i3] := tmpStrs[i3]+'亿';
        end;    for i3 := high(tmpStrs) downto low(tmpStrs) do
          tmpStr := tmpStr+tmpStrs[i3];    while (AnsiPos('00', tmpStr)>0) do
        begin
          tmpStr := StringReplace(tmpStr, '00', '0', [rfReplaceAll]);
        end;    tmpStr := StringReplace(tmpStr, '0亿', '亿', [rfReplaceAll]);    tmpStr1 := tmpStr;
        for i3 := 1 to length(tmpStr) do
        begin
          if tmpStr[i3] in ['0'..'9'] then
          begin
            tmpStr1 := StringReplace(tmpStr1, tmpStr[i3], U_NUM[strToInt(tmpStr[i3])], [rfReplaceAll]);
          end;
        end;    memo.Text := tmpStr1;
        combobox1.Items := tmpLst;  finally
        tmpLst.Free;
      end;end;end.
      

  44.   

    回wyz0311310213:
    你所说的不是主要问题,只要在处理时对输入的数字预处理一下就可以了!
      

  45.   

    欢迎测试并指正错误!
    public class DigitToChinese
    {
    public static final String CHINESE_NUMBER="零壹贰叁肆伍陆柒捌玖";
    private static final String CARRY_UNITS[]={"","拾","佰","仟"};
    private static final String CARRY_UNITS_BIG[]={"","万","亿","兆","硕","京"};
    public String convert(String digit){
    return convert(toIntArray(digit));

    } private int [] toIntArray(String digit){
    char [] chars = digit.toCharArray();
    int [] toReturn = new int[digit.length()];
    for(int i=0;i<toReturn.length;i++){
    toReturn[i] = (chars[i]-'0');
    if(toReturn[i]<0||(chars[i]-'0')>9)
    throw new NumberFormatException("数字字符串格式不正确");
    }
    return toReturn;
    } private String convert(int [] digit){
    StringBuffer out = new StringBuffer();
    int maxLen=CARRY_UNITS.length*(CARRY_UNITS_BIG.length-1);
    int offset = 0;
    boolean outZero = false;
    for(int i=0;i<maxLen&&(i+offset)<digit.length;i++){
    int curDigit = digit.length-(i+offset+1);
    if(i%CARRY_UNITS.length==0&&shouldOutBigUnit(digit,curDigit)) {
    out.append(CARRY_UNITS_BIG[i/CARRY_UNITS.length]);
    outZero=false;
    }
    if(digit[digit.length-(i+offset+1)]!=0){
    out.append(CARRY_UNITS[i%CARRY_UNITS.length]);
    out.append(CHINESE_NUMBER.charAt(digit[curDigit]));
    outZero = true;
    }else{
    if(outZero){
    out.append(CHINESE_NUMBER.charAt(0));
    outZero=false;
    }
    }
    if(i==maxLen-1&&digit.length>maxLen){
    i=-1;
    offset+=maxLen;
    if(shouldOutBigUnit(digit,digit.length-(offset+1)))
    out.append(CARRY_UNITS_BIG[CARRY_UNITS_BIG.length-1]);
    }
    }
    return reverse(out).toString();
    }

    public boolean shouldOutBigUnit(int [] digit,int p){
    for(int i=0;i<CARRY_UNITS.length&&(p-i)>=0;i++){
    if(digit[p-i]!=0)
    return true;
    }
    return false;
    }

    private StringBuffer reverse(StringBuffer sb){
    int len = sb.length();
    for(int i=0;i<len/2;i++){
    char a = sb.charAt(i);
    sb.setCharAt(i, sb.charAt(len-i-1));
    sb.setCharAt(len-i-1, a);
    }
    return sb;
    } public static void main(String[] args) {
    DigitToChinese dtc = new DigitToChinese();
    dtc.convert("100564100515140122");
    }
    }
      

  46.   

    import java.util.Hashtable;
    import java.util.Vector;
    class Converter {
    // 中国的计数是四位一个单位的处理方式 例如 1 5487 4584 对应的单位是 亿 万 默认
    // 每四位的一个单元中,处理方式是一样的,当前能够处理的最大绝对值位数是UNIT_NAME.length * 4
    private final static String[] UNIT_NAME = {"亿", "萬", ""};
    private final static String[] SUB_UNIT_NAME = {"仟", "佰", "拾"};
    private final static String[] NUMBER_NAME = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
    private static Hashtable<Integer, String> nums = new Hashtable<Integer, String>();
    static {
    for (int i = 0; i < NUMBER_NAME.length; i++) {
    nums.put(i, NUMBER_NAME[i]);
    }
    }
    public static String convert(long value) throws TooBigNumberException {
    boolean isMinus = value < 0;
    if (isMinus) {
    value = Math.abs(value);
    }
    String result = "";
    String valueString = String.valueOf(value);
    char[] chars = valueString.toCharArray();
    if (chars.length > UNIT_NAME.length * 4) {
    throw new TooBigNumberException();
    } else {
    // 当前可以处理,进行四段分割,每部分进行相同的处理,再添加各自段的单位
    String[] segments = splitValue2Segments(chars, 4);
    for (int i = 0; i < segments.length; i++) {
    System.out.println("Segment " + i + " :" + segments[i]);
    }
    for (int i = 0, j = UNIT_NAME.length - segments.length; i < segments.length; i++) {
    result += translate(segments[i]) + UNIT_NAME[j++];
    }
    }
    if (isMinus) {
    result = "负" + result;
    }
    return result;
    }
    /**
     * 将一个最多四个数的片段转换为自然语言表示方式 每一段由最多四为组成,最大数为9999
     * 
     * @param value
     * @return
     */
    private static String translate(String value) {
    String result = "";
    int intValue = Integer.parseInt(value);
    int thousandBit = intValue / 1000;
    int hundredBit = (intValue - thousandBit * 1000) / 100;
    int tenthBit = (intValue - thousandBit * 1000 - hundredBit * 100) / 10;
    int oneBit = intValue - thousandBit * 1000 - hundredBit * 100 - tenthBit * 10;
    if (thousandBit > 0) {
    result += nums.get(thousandBit) + "仟";
    if (hundredBit > 0) {
    result += nums.get(hundredBit) + "佰";
    result += nums.get(tenthBit) + "拾";
    result += nums.get(oneBit);
    } else {
    result += "零";
    result += nums.get(tenthBit) + "拾";
    result += nums.get(oneBit);
    }
    } else {
    if (hundredBit > 0) {
    result += nums.get(hundredBit) + "佰";
    result += nums.get(tenthBit) + "拾";
    result += nums.get(oneBit);
    } else {
    if (tenthBit > 0) {
    result += nums.get(tenthBit) + "拾";
    result += nums.get(oneBit);
    } else {
    result += nums.get(oneBit);
    }
    }
    }
    // System.out.println("Translate " + value + " To :" + result);
    return result;
    }
    public static void main(String[] args) {
    try {
    System.out.println(convert(-3423555));
    } catch (TooBigNumberException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    /**
     * 把字符数组分割为指定段数
     * 
     * @param chars
     * @return
     */
    public static String[] splitValue2Segments(char[] chars, int segments) {
    int count = 0;
    Vector<String> v = new Vector<String>();
    StringBuffer sb = new StringBuffer();
    for (int i = chars.length - 1; i >= 0; i--) {
    if (count >= segments) {
    v.add(sb.toString());
    sb = new StringBuffer();
    count = 0;
    }
    sb.insert(0, chars[i]);
    count++;
    }
    if (sb.length() > 0) {
    v.add(sb.toString());
    }
    String[] result = new String[v.size()];
    for (int i = v.size() - 1, j = 0; i >= 0; i--) {
    result[j++] = v.elementAt(i);
    }
    return result;
    }
    }
    class TooBigNumberException extends Exception {
    public String toString() {
    return "数值过大,当前系统无法处理。";
    }
    }
      

  47.   

    还在讨论呀。其实主要就是有几点要注意:
    1)一般情况下,正确地对应中文和数字的叫法,这主要是根据“拾佰仟万”以后应该再叫“拾佰仟”万,“亿”以后应该重复“拾佰仟万”亿来确定,所以,我们给出完整的单位序列应该是“拾佰仟万拾佰仟亿拾佰仟万”(由于整形的位数限制,到这里就够了);
    2)出现0的情况,习惯上就应该有一个,而且只有一个零就够了,比如:1003应该叫做一千零三
    3)当在万和亿以上的数字,如果出现0,应该加上万和亿的单位,如:10030叫一万零三叁拾,1003000040叫做一拾亿零叁佰万零四拾
    4)特殊的,如果有1000000001应叫一拾亿零一,中间不要有万的情况出现
    所以,个人觉得前面我给出的程序是对的,基本解决了这几个问题,而且程序也不太复杂,大家讨论。这了再贴一次:
    public static void main(String[] arg) throws IOException {
    String d="拾佰仟万拾佰仟亿拾佰仟万";
    String s="零壹贰叁肆伍陆柒捌玖";
    boolean zero=false;
    long value=1000000009;
    int count=0;
    String Cvalue="";
    while(value>0) {
    int b=(int)(value % 10);
    if(!zero || b!=0) {
    String t="";
    if(b!=0) {
    t=s.substring(b,b+1);
    if(count>0) t+=d.substring(count-1,count);
    zero=false;
    }
    else if(count!=4 && count!=8){
    t="零";
    zero=true;
    }
    Cvalue=t+Cvalue;
    }
    if(count==4 && !Cvalue.contains("万")) Cvalue="万"+Cvalue;
    if(count==8 && !Cvalue.contains("亿")) Cvalue="亿"+Cvalue;
    count++;
    value/=10;
    }
    Cvalue=Cvalue.replaceFirst("亿万","亿");
    System.out.println(Cvalue);
    }
    以下是几个结果:
    1000000009:壹拾亿零玖
    1023000009:壹拾亿贰仟叁佰万零玖
    123000809:壹亿贰仟叁佰万零捌佰零玖
    1230809:壹佰贰拾叁万零捌佰零玖
    18009:壹万捌仟零玖
    8092:捌仟零玖拾贰
      

  48.   

    import java.util.Hashtable;
    import java.util.Vector;
    class Converter {
    // 中国的计数是四位一个单位的处理方式 例如 1 5487 4584 对应的单位是 亿 万 默认
    // 每四位的一个单元中,处理方式是一样的,当前能够处理的最大绝对值位数是UNIT_NAME.length * 4
    private final static String[] UNIT_NAME = {"亿", "萬", ""};
    private final static String[] SUB_UNIT_NAME = {"仟", "佰", "拾"};
    private final static String[] NUMBER_NAME = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
    private static Hashtable<Integer, String> nums = new Hashtable<Integer, String>();
    static {
    for (int i = 0; i < NUMBER_NAME.length; i++) {
    nums.put(i, NUMBER_NAME[i]);
    }
    }
    public static String convert(long value) throws TooBigNumberException {
    boolean isMinus = value < 0;
    if (isMinus) {
    value = Math.abs(value);
    }
    String result = "";
    String valueString = String.valueOf(value);
    char[] chars = valueString.toCharArray();
    if (chars.length > UNIT_NAME.length * 4) {
    throw new TooBigNumberException();
    } else {
    // 当前可以处理,进行四段分割,每部分进行相同的处理,再添加各自段的单位
    String[] segments = splitValue2Segments(chars, 4);
    for (int i = 0, j = UNIT_NAME.length - segments.length; i < segments.length; i++) {
    if (segments.length > 1 && i == segments.length - 1) {
    result += "零";
    }
    result += translate(segments[i]) + UNIT_NAME[j++];
    }
    }
    if (isMinus) {
    result = "负" + result;
    }
    return result;
    }
    /**
     * 将一个最多四个数的片段转换为自然语言表示方式 每一段由最多四为组成,最大数为9999
     * 
     * @param value
     * @return
     */
    private static String translate(String value) {
    String result = "";
    int intValue = Integer.parseInt(value);
    int thousandBit = intValue / 1000;
    int hundredBit = (intValue - thousandBit * 1000) / 100;
    int tenthBit = (intValue - thousandBit * 1000 - hundredBit * 100) / 10;
    int oneBit = intValue - thousandBit * 1000 - hundredBit * 100 - tenthBit * 10;
    if (thousandBit > 0) {
    result += nums.get(thousandBit) + "仟";
    if (hundredBit > 0) {
    result += nums.get(hundredBit) + "佰";
    if (tenthBit > 0) {
    result += nums.get(tenthBit) + "拾";
    if (oneBit > 0) {
    result += nums.get(oneBit);
    }
    } else {
    if (oneBit > 0) {
    result += "零";
    result += nums.get(oneBit);
    }
    }
    } else {
    if (tenthBit > 0) {
    result += "零";
    result += nums.get(tenthBit) + "拾";
    if (oneBit > 0) {
    result += nums.get(oneBit);
    }
    } else {
    if (oneBit > 0) {
    result += nums.get(oneBit);
    } } }
    } else {
    if (hundredBit > 0) {
    result += nums.get(hundredBit) + "佰";
    if (tenthBit > 0) {
    result += nums.get(tenthBit) + "拾";
    if (oneBit > 0) {
    result += nums.get(oneBit);
    }
    } else {
    if (oneBit > 0) {
    result += "零";
    result += nums.get(oneBit);
    }
    }
    } else {
    if (tenthBit > 0) {
    result += nums.get(tenthBit) + "拾";
    if (oneBit > 0) {
    result += nums.get(oneBit);
    }
    } else {
    if (oneBit > 0) {
    result += nums.get(oneBit);
    }
    }
    }
    }
    // System.out.println("Translating from " + value + " To :" + result);
    return result;
    }
    public static void main(String[] args) {
    try {
    System.out.println(convert(10000004));
    } catch (TooBigNumberException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    /**
     * 把字符数组分割为指定段数
     * 
     * @param chars
     * @return
     */
    public static String[] splitValue2Segments(char[] chars, int segments) {
    int count = 0;
    Vector<String> v = new Vector<String>();
    StringBuffer sb = new StringBuffer();
    for (int i = chars.length - 1; i >= 0; i--) {
    if (count >= segments) {
    v.add(sb.toString());
    sb = new StringBuffer();
    count = 0;
    }
    sb.insert(0, chars[i]);
    count++;
    }
    if (sb.length() > 0) {
    v.add(sb.toString());
    }
    String[] result = new String[v.size()];
    for (int i = v.size() - 1, j = 0; i >= 0; i--) {
    result[j++] = v.elementAt(i);
    }
    return result;
    }
    }
    class TooBigNumberException extends Exception {
    public String toString() {
    return "数值过大,当前系统无法处理。";
    }
    }
      

  49.   

    import java.util.Hashtable;
    import java.util.Vector;
    class Converter {
    // 中国的计数是四位一个单位的处理方式 例如 1 5487 4584 对应的单位是 亿 万 默认
    // 每四位的一个单元中,处理方式是一样的,当前能够处理的最大绝对值位数是UNIT_NAME.length * 4
    private final static String[] UNIT_NAME = {"亿", "萬", ""};
    private final static String[] SUB_UNIT_NAME = {"仟", "佰", "拾"};
    private final static String[] NUMBER_NAME = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
    private static Hashtable<Integer, String> nums = new Hashtable<Integer, String>();
    static {
    for (int i = 0; i < NUMBER_NAME.length; i++) {
    nums.put(i, NUMBER_NAME[i]);
    }
    }
    public static String convert(long value) throws TooBigNumberException {
    boolean isMinus = value < 0;
    if (isMinus) {
    value = Math.abs(value);
    }
    String result = "";
    String valueString = String.valueOf(value);
    char[] chars = valueString.toCharArray();
    if (chars.length > UNIT_NAME.length * 4) {
    throw new TooBigNumberException();
    } else {
    // 当前可以处理,进行四段分割,每部分进行相同的处理,再添加各自段的单位
    String[] segments = splitValue2Segments(chars, 4);
    for (int i = 0, j = UNIT_NAME.length - segments.length; i < segments.length; i++) {
    if (segments.length > 1 && i == segments.length - 1) {
    if (Integer.parseInt(segments[i]) < 100) {
    result += "零";
    }
    }
    result += translate(segments[i]) + UNIT_NAME[j++];
    }
    }
    if (isMinus) {
    result = "负" + result;
    }
    return result;
    }
    /**
     * 将一个最多四个数的片段转换为自然语言表示方式 每一段由最多四为组成,最大数为9999
     * 
     * @param value
     * @return
     */
    private static String translate(String value) {
    String result = "";
    int intValue = Integer.parseInt(value);
    int thousandBit = intValue / 1000;
    int hundredBit = (intValue - thousandBit * 1000) / 100;
    int tenthBit = (intValue - thousandBit * 1000 - hundredBit * 100) / 10;
    int oneBit = intValue - thousandBit * 1000 - hundredBit * 100 - tenthBit * 10;
    if (thousandBit > 0) {
    result += nums.get(thousandBit) + "仟";
    if (hundredBit > 0) {
    result += nums.get(hundredBit) + "佰";
    if (tenthBit > 0) {
    result += nums.get(tenthBit) + "拾";
    if (oneBit > 0) {
    result += nums.get(oneBit);
    }
    } else {
    if (oneBit > 0) {
    result += "零";
    result += nums.get(oneBit);
    }
    }
    } else {
    if (tenthBit > 0) {
    result += "零";
    result += nums.get(tenthBit) + "拾";
    if (oneBit > 0) {
    result += nums.get(oneBit);
    }
    } else {
    if (oneBit > 0) {
    result += nums.get(oneBit);
    } } }
    } else {
    if (hundredBit > 0) {
    result += nums.get(hundredBit) + "佰";
    if (tenthBit > 0) {
    result += nums.get(tenthBit) + "拾";
    if (oneBit > 0) {
    result += nums.get(oneBit);
    }
    } else {
    if (oneBit > 0) {
    result += "零";
    result += nums.get(oneBit);
    }
    }
    } else {
    if (tenthBit > 0) {
    result += nums.get(tenthBit) + "拾";
    if (oneBit > 0) {
    result += nums.get(oneBit);
    }
    } else {
    if (oneBit > 0) {
    result += nums.get(oneBit);
    }
    }
    }
    }
    // System.out.println("Translating from " + value + " To :" + result);
    return result;
    }
    public static void main(String[] args) {
    try {
    System.out.println(convert(8888683));
    } catch (TooBigNumberException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    /**
     * 把字符数组分割为指定段数
     * 
     * @param chars
     * @return
     */
    public static String[] splitValue2Segments(char[] chars, int segments) {
    int count = 0;
    Vector<String> v = new Vector<String>();
    StringBuffer sb = new StringBuffer();
    for (int i = chars.length - 1; i >= 0; i--) {
    if (count >= segments) {
    v.add(sb.toString());
    sb = new StringBuffer();
    count = 0;
    }
    sb.insert(0, chars[i]);
    count++;
    }
    if (sb.length() > 0) {
    v.add(sb.toString());
    }
    String[] result = new String[v.size()];
    for (int i = v.size() - 1, j = 0; i >= 0; i--) {
    result[j++] = v.elementAt(i);
    System.out.println(v.elementAt(i));
    }
    return result;
    }
    }
    class TooBigNumberException extends Exception {
    public String toString() {
    return "数值过大,当前系统无法处理。";
    }
    }
      

  50.   

    上面的程序掉了一句,去除尾零的句子:
    ……
    Cvalue=Cvalue.replaceFirst("亿万","亿");//去除亿万连接的非法情况
    if(Cvalue.endsWith("零")) Cvalue=Cvalue.substring(0,Cvalue.length()-1);//去除尾零
    System.out.println(Cvalue);
    ……
    一个例子为:
    1002003090:壹拾亿零贰佰零万叁仟零玖拾
      

  51.   

    import java.util.Hashtable;
    import java.util.Vector;
    class Converter {
    // 中国的计数是四位一个单位的处理方式 例如 1 5487 4584 对应的单位是 亿 万 默认
    // 每四位的一个单元中,处理方式是一样的,当前能够处理的最大绝对值位数是UNIT_NAME.length * 4
    private final static String[] UNIT_NAME = {"亿", "萬", ""};
    private final static String[] SUB_UNIT_NAME = {"仟", "佰", "拾"};
    private final static String[] NUMBER_NAME = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
    private static Hashtable<Integer, String> nums = new Hashtable<Integer, String>();
    static {
    for (int i = 0; i < NUMBER_NAME.length; i++) {
    nums.put(i, NUMBER_NAME[i]);
    }
    }
    public static String convert(long value) throws TooBigNumberException {
    boolean isMinus = value < 0;
    if (isMinus) {
    value = Math.abs(value);
    }
    String result = "";
    String valueString = String.valueOf(value);
    char[] chars = valueString.toCharArray();
    if (chars.length > UNIT_NAME.length * 4) {
    throw new TooBigNumberException();
    } else {
    // 当前可以处理,进行四段分割,每部分进行相同的处理,再添加各自段的单位
    String[] segments = splitValue2Segments(chars, 4);
    for (int i = 0, j = UNIT_NAME.length - segments.length; i < segments.length; i++, j++) {
    if (segments.length > 1 && i == segments.length - 1) {
    if (Integer.parseInt(segments[i]) < 100) {
    result += "零";
    }
    }
    if (Integer.parseInt(segments[i]) > 0) {
    result += translate(segments[i]) + UNIT_NAME[j];
    } }
    }
    if (isMinus) {
    result = "负" + result;
    }
    return result;
    }
    /**
     * 将一个最多四个数的片段转换为自然语言表示方式 每一段由最多四为组成,最大数为9999
     * 
     * @param value
     * @return
     */
    private static String translate(String value) {
    String result = "";
    int intValue = Integer.parseInt(value);
    int thousandBit = intValue / 1000;
    int hundredBit = (intValue - thousandBit * 1000) / 100;
    int tenthBit = (intValue - thousandBit * 1000 - hundredBit * 100) / 10;
    int oneBit = intValue - thousandBit * 1000 - hundredBit * 100 - tenthBit * 10;
    if (thousandBit > 0) {
    result += nums.get(thousandBit) + "仟";
    if (hundredBit > 0) {
    result += nums.get(hundredBit) + "佰";
    if (tenthBit > 0) {
    if (tenthBit > 1) {
    result += nums.get(tenthBit) + "拾";
    } else {
    result += "拾";
    } if (oneBit > 0) {
    result += nums.get(oneBit);
    }
    } else {
    if (oneBit > 0) {
    result += "零";
    result += nums.get(oneBit);
    }
    }
    } else {
    if (tenthBit > 0) {
    result += "零";
    if (tenthBit > 1) {
    result += nums.get(tenthBit) + "拾";
    } else {
    result += "拾";
    } if (oneBit > 0) {
    result += nums.get(oneBit);
    }
    } else {
    if (oneBit > 0) {
    result += nums.get(oneBit);
    } } }
    } else {
    if (hundredBit > 0) {
    result += nums.get(hundredBit) + "佰";
    if (tenthBit > 0) {
    if (tenthBit > 1) {
    result += nums.get(tenthBit) + "拾";
    } else {
    result += "拾";
    } if (oneBit > 0) {
    result += nums.get(oneBit);
    }
    } else {
    if (oneBit > 0) {
    result += "零";
    result += nums.get(oneBit);
    }
    }
    } else {
    if (tenthBit > 0) {
    if (tenthBit > 1) {
    result += nums.get(tenthBit) + "拾";
    } else {
    result += "拾";
    }
    if (oneBit > 0) {
    result += nums.get(oneBit);
    }
    } else {
    if (oneBit > 0) {
    result += nums.get(oneBit);
    }
    }
    }
    }
    // System.out.println("Translating from " + value + " To :" + result);
    return result;
    }
    public static void main(String[] args) {
    try {
    System.out.println(convert(1000000009));
    } catch (TooBigNumberException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    /**
     * 把字符数组分割为指定段数
     * 
     * @param chars
     * @return
     */
    public static String[] splitValue2Segments(char[] chars, int segments) {
    int count = 0;
    Vector<String> v = new Vector<String>();
    StringBuffer sb = new StringBuffer();
    for (int i = chars.length - 1; i >= 0; i--) {
    if (count >= segments) {
    v.add(sb.toString());
    sb = new StringBuffer();
    count = 0;
    }
    sb.insert(0, chars[i]);
    count++;
    }
    if (sb.length() > 0) {
    v.add(sb.toString());
    }
    String[] result = new String[v.size()];
    for (int i = v.size() - 1, j = 0; i >= 0; i--) {
    result[j++] = v.elementAt(i);
    System.out.println(v.elementAt(i));
    }
    return result;
    }
    }
    class TooBigNumberException extends Exception {
    public String toString() {
    return "数值过大,当前系统无法处理。";
    }
    }
      

  52.   

    import java.util.ArrayList;
    import java.util.regex.*;
    public class MoneyTranslater {
    public static final String [] unitStrs={"","万","亿","兆"};
    public static final String [] numUnitStrs={"","拾","佰","仟"};
    public static final String [] numStrs={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
    public static String translate(String num){
    StringBuffer returnStr=new StringBuffer();
    //String num=String.valueOf(number);
    String [] strs1=splitByDigit(num, 4);
    boolean f=true;//类似于flag
    boolean f2=true;//类似于flag2
    boolean flag2=true;//可以补零 则为true
    for (int i = 0; i < strs1.length; i++) {
    int m=Integer.valueOf(strs1[i]);
    if(f){
    if(m==0) continue;
    else{
    f=false;
    }
    }

    if(m==0){
    if(f2&&flag2){//如果在其后面的可以补零标志已经为true 并且区域可以补零 则补零 
    returnStr.insert(0, numStrs[0]);
    f2=false;
    }
    continue;
    }else{
    f2=true;//若出现不为零的区域 则置区域补零标志为true
    }
    returnStr.insert(0, unitStrs[i]);
    boolean flag=true;//如果从首位开始往前 出现第一个不为零的数 则为false;

    String [] strs2=splitByDigit(strs1[i],1);
    for (int j = 0; j < strs2.length; j++) {
    int n=Integer.valueOf(strs2[j]);
    if(flag){
    if(n==0) continue;//在还没有出现第一个不为零的位时出现零 则跳过
    else{
    flag=false; //从个位开始已经出现不为零的数 可以开始计数
    }
    }
    if(n==0){ 
    if(flag2){
    returnStr.insert(0,numStrs[0]);
    flag2=false;//已经补了一个零 若再次出现0 则跳过 除非出现非零位之后
    }
    continue;
    }else{
    flag2=true;//出现非零位 标志置为true 表示可以补零
    }

    returnStr.insert(0, numUnitStrs[j]);
    returnStr.insert(0, numStrs[n]);
    }
    }
    return returnStr.toString();
    }
    /**
     * 这个方法实现将源操作字符串src,按给定的分割位数分割 比如
     * <code>String[] ss=splitByDigit("123456889abcdefg",4)</code>的结果是一个数组
     * @param src
     * @param digit
     * @return
     */
    public static String[] splitByDigit(String src,int digit){
    String destStr=src;
    ArrayList<String> list=new ArrayList<String>();
    while(destStr.length()>0){
    if(destStr.length()>digit){
    list.add(destStr.substring(destStr.length()-digit));
    destStr=destStr.substring(0,destStr.length()-digit);
    }else{
    list.add(destStr);
    destStr="";
    }
    }
    String [] returnS=new String [list.size()];
    return list.toArray(returnS);
    }
    /**
     * @param args
     */
    public static void main(String[] args) { System.out.println(translate("12000001000001"));


    }
    }
    以上的unitStrs可以自己修改单位
      

  53.   

    import java.util.ArrayList;
    import java.util.regex.*;
    public class MoneyTranslater {
    public static final String [] unitStrs={"","万","亿","兆"};
    public static final String [] numUnitStrs={"","拾","佰","仟"};
    public static final String [] numStrs={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
    public static String translate(String num){
    StringBuffer returnStr=new StringBuffer();
    //String num=String.valueOf(number);
    String [] strs1=splitByDigit(num, 4);
    boolean f=true;//类似于flag
    boolean f2=true;//类似于flag2
    boolean flag2=true;//可以补零 则为true
    boolean f3=true;//在每个大单位出现之后 是否能加零
    for (int i = 0; i < strs1.length; i++) {
    int m=Integer.valueOf(strs1[i]);
    if(f){
    if(m==0) continue;
    else{
    f=false;
    }
    }

    if(m==0){
    if(f2&&flag2){//如果在其后面的可以补零标志已经为true 并且区域可以补零 则补零 
    returnStr.insert(0, numStrs[0]);
    f2=false;
    }
    continue;
    }else{
    f2=true;//若出现不为零的区域 则置区域补零标志为true
    }
    returnStr.insert(0, unitStrs[i]);
    boolean flag=true;//如果从首位开始往前 出现第一个不为零的数 则为false;

    String [] strs2=splitByDigit(strs1[i],1);
    for (int j = 0; j < strs2.length; j++) {
    int n=Integer.valueOf(strs2[j]);
    if(flag){
    if(n==0){
    if(f3&&i!=0){
    returnStr.insert(1, numStrs[0]);
    f3=false;
    }
    continue;//在还没有出现第一个不为零的位时出现零 则跳过

    }
    else{
    flag=false; //从个位开始已经出现不为零的数 可以开始计数
    }
    }
    if(n==0){ 
    if(flag2){
    returnStr.insert(0,numStrs[0]);
    flag2=false;//已经补了一个零 若再次出现0 则跳过 除非出现非零位之后
    }
    continue;
    }else{
    flag2=true;//出现非零位 标志置为true 表示可以补零
    }

    returnStr.insert(0, numUnitStrs[j]);
    returnStr.insert(0, numStrs[n]);
    }
    f3=true;
    }
    return returnStr.toString();
    }
    /**
     * 这个方法实现将源操作字符串src,按给定的分割位数分割 比如
     * <code>String[] ss=splitByDigit("123456889abcdefg",4)</code>的结果是一个数组
     * @param src
     * @param digit
     * @return
     */
    public static String[] splitByDigit(String src,int digit){
    String destStr=src;
    ArrayList<String> list=new ArrayList<String>();
    while(destStr.length()>0){
    if(destStr.length()>digit){
    list.add(destStr.substring(destStr.length()-digit));
    destStr=destStr.substring(0,destStr.length()-digit);
    }else{
    list.add(destStr);
    destStr="";
    }
    }
    String [] returnS=new String [list.size()];
    return list.toArray(returnS);
    }
    /**
     * @param args
     */
    public static void main(String[] args) { System.out.println(translate("10200101001001"));


    }
    }
    做了一下修正 单位之间的零可以出现了
      

  54.   

    还没有结帖呀
    修正自己的程序
    package jm.util;import java.util.ArrayList;/**
     * <p>Title: JM 整合Swing控件,使用配置信息</p>
     *
     * <p>Copyright: Copyright (c) 2004-2006</p>
     *
     * <p>Company: 1SHome</p>
     *
     * <p>@author Spook</p>
     *
     * @since 1.3
     * @see JDK 1.5.0.6
     */
    public class JMRectangle
    {
        @SuppressWarnings("unchecked")
    public static String daxie(String sum)
        {
            String [] n=new String[10];
            n[0]="";
            n[1]="壹";
            n[2]="贰";
            n[3]="叁";
            n[4]="肆";
            n[5]="伍";
            n[6]="陆";
            n[7]="柒";
            n[8]="捌";
            n[9]="玖";
            String [] d=new String[10];
            d[0]="";
            d[1]="拾";
            d[2]="佰";
            d[3]="仟";
            String [] e=new String[10];
            e[0]="萬";
            e[1]="亿";        //计算数字的位数
            int wei= sum.length();
    System.out.println("计算数字的位数=="+wei);        ArrayList str = new ArrayList();
            int digit = 0;
            int digit1 = 0;
            for (int i = wei - 1; i >= 0; i--) {
                if (digit == 4) {
                    digit = 0;
                    str.add(0, e[digit1]);
                    digit1++;
                    if(digit1==2)digit1=0;
                }
                if (!"0".equals("" + sum.charAt(i))) {
                    str.add(0, d[digit]);
                    str.add(0, n[Integer.parseInt("" + sum.charAt(i))]);
                }
                digit++;
            }
            System.out.println(str);
            return str.toString();
        }    public static void main(String[] args)
        {
            System.out.println(daxie("1234567890001"));
        }
    }简单好用
      

  55.   

    楼上的写法不标准
    (!"0".equals("" + sum.charAt(i))) 为什么不写成(!'0'==sum.charAt(i))
    ArrayList str = new ArrayList();为什么不写成List str=new ArrayList();命名也不太规范
    数组为什么不写成 private static String[] CHINESE_NUMBER = { "零", "壹", "贰", "叁", "肆", "伍",
    "陆", "柒", "捌", "玖" };
    根据你的意思ArrayList
    换成StringBuffer好一些
      

  56.   

    偶也凑凑热闹:)
    -----------------------------------------
    public final class RMB{
       private RMB(){
       }   /**
         * 将给定的阿拉伯数字转化为中文大写钱款
         * 
         * @param input 给定的阿拉伯数字
         * @return 中文大写钱款
         */
        public static String toRMB(String input) {        if (input == null || input.equals("")) {
                return "零";
            }        // 判断输入是否为数字(方法不贴了,先注释了)
            //if (!isNumber(input)) {
            //    throw new IllegalArgumentException(
            //        "The money input must be a number!");
            //}        // 判断是否含有小数点(将给定字符串四舍五入。方法不贴了,先注释了)
            //input = format(round(toDouble(input).doubleValue()));
            int dotIndex = input.indexOf(".");
            if (dotIndex > 0) {
                if (dotIndex == input.length() - 2) {
                    input = input + "0";
                }
                else if (dotIndex == input.length() - 1) {
                    input = input + "00";
                }
            }
            else {
                input = input + ".00";
            }        // 最多位数:15位数字
            if (dotIndex > 14) {
                throw new IllegalArgumentException(
                    "The money input is too large to convert!");
            }        final String[] numbers = new String[] {"零", "壹", "贰", "叁", "肆", "伍",
                "陆", "柒", "捌", "玖"};
            final String[] units = new String[] {"分", "角", "元", "拾", "佰", "仟", "万",
                "拾", "佰", "仟", "亿", "拾", "佰", "仟", "万"};
            final String[] invalids = new String[] {"拾零元", "零[仟佰拾元角分]", "零+", "零亿",
                "零万", "零元", "亿零*+万"};
            final String[] valids = new String[] {"拾元", "零", "零", "亿", "万", "元",
                "亿"};        // 反转给定数字
            StringBuffer inputReversed = new StringBuffer(input).reverse();
            inputReversed.deleteCharAt(inputReversed.indexOf("."));        // 按位转化并添加单位
            StringBuffer resultBuffer = new StringBuffer();
            int numberLength = inputReversed.length();
            for (int index = 0; index < numberLength; index++) {
                resultBuffer.append(units[index]);
                resultBuffer.append(numbers[Integer.parseInt(inputReversed.charAt(index)
                    + "")]);
            }        // 替换非法表达方式
            String result = resultBuffer.reverse().toString();
            for (int i = 0; i < invalids.length; i++) {
                result = result.replaceAll(invalids[i], valids[i]);
            }        // 如果以零开头,则去掉零
            if (result.startsWith("零")) {
                result = result.substring(1, result.length());
            }
            // 如果以零结尾,则去掉零
            if (result.endsWith("零")) {
                result = result.substring(0, result.length() - 1);
            }
            // 如果没有角分,则添加整字
            if (result.indexOf("角") < 0 && result.indexOf("分") < 0) {
                result = result + "整";
            }        return result;
        }
        
        public static void main(String[] args) {
            String money = "100000000010.12645";
            System.out.println(RMB.toRMB(money));        String moneyString = "10.01";
            System.out.println(RMB.toRMB(moneyString));
        }
    }
      

  57.   

    hehe:)
    String money = "100000000010.12645";
    改成
    String money = "100000000010.12";
    注释了
    没法保留二位小数然后四舍五入了:)、
      

  58.   

    我的搜索引擎继7月份第二次开放测试后,现在进行第三次开放测试,请大家多批评指正。
    无为搜索引擎开始测试了啊
    (第三次开放测试啊)  网站运行后的效果请参见: 
    http://219.233.38.213/Search/WuWei.aspx
    代码下载地址 :http://www.ofile.cn/se.rar  
    前两次用 CGI+html做了一个版本还做了一个 Java版本 (这次比较忙,所以没来的及更新,有需要的跟我说一声啊)
    这次用 C# ASP.NET做一个 玩玩
    做的不好,请大家做指教啊!
    这次还实现了计算器功能啊
    可以搜索一下 sin(1+2) 看看 
    另外 sh=1&sf=1&ua=1&sa=1&st=1&wh=1&ph=1     把这里面的 1改成 0看看 每个部分都是可以控制的:)
    至于为什么要把客户端网站部分开源,请参考我第二次开放测试时即兴写的文章 :   最近我研究搜索引擎 七 (长长中国人的志气篇)  
    http://www.baidu.com/s?wd=%D7%EE%BD%FC%CE%D2%D1%D0%BE%BF%CB%D1%CB%F7%D2%FD%C7%E6%C6%DF&cl=3
    承盟广大网友看的起 该文目前已经被全国 2000多网站转载
    先说一下技术指标: 本次我收录了全国30多万个一、二级域名, 网页采集用了三周时间,目前已经采集了 12万网站,平均每个网站收录 30篇网页,索引进行了 10天,
    目前已经索引了 100多万网页 。 搜索核心部分采用这次采用 C  语言开发。 客户端提供三个版本一个CGI+HTML版本,一个 Java版本,一个 ASP.NET版本。代码下载地址 :http://www.ofile.cn/se.rar 
    搜索网站客户端(.NET版本)整体解决方案(源代码)
    (第三次开放测试啊)  网站运行后的效果请参见: 
    http://219.233.38.213/Search/WuWei.aspx
      

  59.   

    昨天用vc做的
    void CNumDlg::AddStr(CString sStr, CString *sNum, TCHAR tcUnit)
    {
    int t = sStr.GetLength();
    CString sTemp = _T("");
    for (int i=0; i<t; i++)
    {
    TCHAR tcTemp = sStr.GetAt(t-1-i);
    switch (tcTemp)
    {
    case _T('0'):
    if (sTemp == _T("") || sTemp.GetAt(0) == _T('零'))
    {
    break;
    }
    else
    {
    sTemp.Insert(0, _T("零"));
    }
    break;
    case _T('1'):
    sTemp.Insert(0, _T("壹"));
    break;
    case _T('2'):
    sTemp.Insert(0, _T("贰"));
    break;
    case _T('3'):
    sTemp.Insert(0, _T("叁"));
    break;
    case _T('4'):
    sTemp.Insert(0, _T("肆"));
    break;
    case _T('5'):
    sTemp.Insert(0, _T("伍"));
    break;
    case _T('6'):
    sTemp.Insert(0, _T("陆"));
    break;
    case _T('7'):
    sTemp.Insert(0, _T("柒"));
    break;
    case _T('8'):
    sTemp.Insert(0, _T("捌"));
    break;
    case _T('9'):
    sTemp.Insert(0, _T("玖"));
    break;
    default:
    break;
    }
    switch(i)
    {
    case 0:
    break;
    case 1:
    if (sTemp != _T("") && sTemp.GetAt(0) != _T('零'))
    {
    sTemp.Insert(1, _T("拾"));
    }
    break;
    case 2:
    if (sTemp != _T("") && sTemp.GetAt(0) != _T('零'))
    {
    sTemp.Insert(1, _T("佰"));
    }
    break;
    case 3:
    if (sTemp != _T("") && sTemp.GetAt(0) != _T('零'))
    {
    sTemp.Insert(1, _T("仟"));
    }
    break;
    default:
    break;
    }
    }
    if (tcUnit != (TCHAR)0 && sTemp!= _T(""))
    {
    sNum->Insert(0,tcUnit);
    }
    else
    {
    if (tcUnit == _T('亿'))
    {
    sNum->Insert(0,tcUnit);
    }
    }
    sNum->Insert(0,sTemp);
    }void CNumDlg::OnRead() 
    {
    // TODO: Add your control notification handler code here
    UpdateData(TRUE);
    CString sNum = _T("");
    int t = m_sNum.GetLength();
    while (true)
    {
    if (t>0 && m_sNum.GetAt(0) == _T('0'))
    {
    m_sNum.Delete(0);
    t--;
    continue;
    }
    break;
    }
    if (t<=0)
    {
    MessageBox(_T("您的输入错误!"));
    return;
    }
    for (int i = 0; i<t; i++)
    {
    TCHAR tc = m_sNum.GetAt(i); if (!_istdigit(tc))
    {
    MessageBox(_T("请输入数字!"));
    return;
    }
    }
    if (t<=4)
    {
    AddStr (m_sNum, &sNum, (TCHAR)0);
    }
    if (t>4 && t<=8)
    {
    CString sTh;
    sTh = m_sNum.Right(4);
    AddStr (sTh, &sNum, (TCHAR)0);
    CString sM;
    sM = m_sNum.Left(m_sNum.GetLength() - 4);
    AddStr (sM, &sNum, _T('万'));
    }
    if (t>8 && t<=12)
    {
    CString sTh;
    sTh = m_sNum.Right(4);
    AddStr (sTh, &sNum, (TCHAR)0);
    CString sM;
    sM = m_sNum.Mid(m_sNum.GetLength()-8, 4);
    AddStr (sM, &sNum, _T('万'));
    CString hM;
    hM = m_sNum.Left(m_sNum.GetLength() - 8);
    AddStr (hM, &sNum, _T('亿'));
    }
    if (t>12 && t<=16)
    {
    CString sTh;
    sTh = m_sNum.Right(4);
    AddStr (sTh, &sNum, (TCHAR)0);
    CString sM;
    sM = m_sNum.Mid(m_sNum.GetLength()-8, 4);
    AddStr (sM, &sNum, _T('万'));
    CString hM;
    hM = m_sNum.Mid(m_sNum.GetLength()-12, 4);
    AddStr (hM, &sNum, _T('亿'));
    CString mHM;
    mHM = m_sNum.Left(m_sNum.GetLength() - 12);
    AddStr (mHM, &sNum, _T('万'));
    }
    if (sNum.GetAt(0)==_T('零'))
    {
    sNum.Delete(0);
    }
    m_sRead = sNum;
    UpdateData(FALSE);
    }
      

  60.   

    package num;public class NumReader { public static String[] n = new String[10];

    public static String[] d = new String[6];

    static {
    n[0] = "零";
    n[1] = "壹";
    n[2] = "贰";
    n[3] = "叁";
    n[4] = "肆";
    n[5] = "伍";
    n[6] = "陆";
    n[7] = "柒";
    n[8] = "捌";
    n[9] = "玖";

            d[0] = "";
            d[1] = "拾";
            d[2] = "佰";
            d[3] = "仟";
            d[4] = "萬";
            d[5] = "亿";
    } public static String readNum(String num) {
    if(!checkParam(num)){
    System.out.println(num + " is not a valid number");
    }
    StringBuffer sb = new StringBuffer();

    int len = num.length();
    String[] numbers = new String[len];
    String[] units = new String[len];
    boolean[] numFlags = new boolean[len];
    boolean[] unitFlags = new boolean[len];

    //caculate every pos
    for(int i=0;i<len;i++){
    Result rs = read(num,i);
    numbers[i] = rs.number;
    units[i] = rs.unit;
    numFlags[i] = rs.numFlag;
    unitFlags[i] = rs.unitFlag;

    // join string
    if(numFlags[i]){
    sb.append(numbers[i]);
    }
    if(unitFlags[i]){
    sb.append(units[i]);
    }
    }

    return sb.toString();
    } public static boolean checkParam(String num) {
    try {
    Double.parseDouble(num);
    } catch (NumberFormatException e) {
    return false;
    }
    return true;
    } public static Result read(String num, int pos) {
    Result rs = new Result();
    rs.number = readNum(num,pos);
    rs.unit = readUnit(num,pos);
    rs.numFlag = readNumFlag(num,pos);
    rs.unitFlag = readUnitFlag(num,pos);
    return rs;
    }

    public static String readNum(String num, int pos) {
    int value = Integer.parseInt(num.substring(pos,pos+1));
    return n[value];
    }

    public static String readUnit(String num, int pos) {
    int len = num.length();
    int count = len - pos - 1;

    int unit = count % 4;
    String unitStr = d[unit];

    int rate = count / 4;
    if( count >= 4 && count % 4 == 0){
    if(rate % 2 == 0){
    unitStr += d[5];
    } else {
    unitStr += d[4];
    }
    }
    return unitStr;
    } public static boolean readNumFlag(String num, int pos) {
    int len = num.length();
    int value = Integer.parseInt(num.substring(pos,pos+1));
    int count = len - pos - 1;
    if( len %4 == 2 &&  value == 1 && pos == 0){
    return false;
    }
    if(value != 0){
    return true;
    }

    if ( count % 4 == 0 ){
    return false;
    }
    int nextValue = Integer.parseInt(num.substring(pos + 1,pos+2));
    if(nextValue != 0){
    return true;
    }
    return false;
    } public static boolean readUnitFlag(String num, int pos) {
    int value = Integer.parseInt(num.substring(pos,pos+1));
    if(value != 0){
    return true;
    }
    int len = num.length();
    int count = len - pos - 1;
    if ( count % 4 == 0 ){
    return true;
    }
    return false;
    }

    public static class Result{
    String number = null;
    String unit = null;
    boolean numFlag = false;
    boolean unitFlag = false;
    }

    public static void main(String[] args) {
    String testNum = "123456789012345678";
    String str = readNum(testNum);
    System.out.println(testNum);
    System.out.println(str);
    }
    }