从C的面向过程转向JAVA的面向对象,思维上有点不习惯,郁闷!
1、编写一个程序,实现列出文件夹下所有文件名的功能。
2、给出大整数加减法的实现思路,例如,199999999999999998+333333333333333333333,或者
123444444444447654-999999999999988877。
3、实现将阿拉伯数字的金额转换成中文大写金额的形式,例如:
¥1011 → 壹仟零壹拾壹元整。
大写数字为:零、壹、贰、叁、肆、伍、陆、柒、捌、玖、拾、佰、仟、万、亿
第2题是不是用java.math包的BigInteger类的add()和multiply()方法实现啊?
请各位高手帮帮忙.

解决方案 »

  1.   

    第一个问题,到网上下载Thinking in java,参看其中的IO部分,有例子。
    第二个问题,可以使用java.math.BigDecimal类的方法来做。
    第三个问题,怕是要自己写点循环或递归程序来做了,没见过这样的类库。
      

  2.   

    第三个问题,我这几天刚好写了一个,可能还不十分完善。import java.text.DecimalFormat;/**
     *
     * @author Trumplet
     */
    public class NumberToZH {
        static final String zhnum_0 = "零壹贰叁肆伍陆柒捌玖";
        static final String zhnum = "零一二三四五六七八九";
        static final String[] zhnum1 = {"","十","百","千"};
        static final String[] zhnum1_0 = {"","拾","佰","仟"};
        static final String[] zhnum2 = {"","万","亿","万亿","亿亿"};
        /** Creates a new instance of NumberToZH */
        public NumberToZH() {
        }
        private static String numberToZH4(String s,boolean fan){
            StringBuffer sb = new StringBuffer();
            if (s.length()!=4) return null;
            for (int i=0;i<4;i++){
                char c1 = s.charAt(i);
                if (c1=='0' && i>1 && s.charAt(i-1)=='0')  continue;
                if (c1!='0' && i>1 && s.charAt(i-1)=='0') sb.append('零');
                if (c1!='0') {
                    if (fan) {
                        sb.append(zhnum_0.charAt(c1-48));
                        sb.append(zhnum1_0[4-i-1]);
                    } else {
                        sb.append(zhnum.charAt(c1-48));
                        sb.append(zhnum1[4-i-1]);
                    }
                }
            }
            return new String(sb);
        }
        public static String numberToZH(long n,boolean fan){
            StringBuffer sb = new StringBuffer();
            String strN = "000"+n;
            int strN_L = strN.length()/4;
            strN = strN.substring(strN.length()-strN_L*4);
            for (int i=0;i<strN_L;i++){
                String s1 = strN.substring(i*4,i*4+4);
                String s2 = numberToZH4(s1,fan);
                sb.append(s2);
                if(s2.length()!=0) sb.append(zhnum2[strN_L-i-1]);
            }
            String s = new String(sb);
            if (s.length()!=0 && s.startsWith("零"))
                s = s.substring(1);
            return s;
        }
        
        public static String numberToZH(double d,boolean fan){
            return numberToZH("" + d,fan);
        }
        public static String numberToZH(String str,boolean fan){
            StringBuffer sb = new StringBuffer();
            int dot = str.indexOf(".");
            if (dot<0) dot=str.length();
            
            String zhengshu = str.substring(0,dot);
            sb.append(numberToZH(Long.parseLong(zhengshu),fan));
            if (dot!=str.length()){
                sb.append("点");
                String xiaoshu = str.substring(dot+1);
                for (int i=0;i<xiaoshu.length();i++){
                    if(fan){
                        sb.append(zhnum_0.charAt(Integer.parseInt(xiaoshu.substring(i,i+1))));
                    } else {
                        sb.append(zhnum.charAt(Integer.parseInt(xiaoshu.substring(i,i+1))));
                    }
                }
            }
            String s = new String(sb);
            if (s.startsWith("零")) s = s.substring(1);
            if (s.startsWith("一十")) s = s.substring(1);
            while (s.endsWith("零")){s = s.substring(0,s.length()-1);}
            if (s.endsWith("点")) s = s.substring(0,s.length()-1);
            return s;
        }
        
        public static String numberToRMB(double rmb){
            String strRMB = "" + rmb;
            DecimalFormat nf = new DecimalFormat("#.#");
            nf.setMaximumFractionDigits(2);
            strRMB=nf.format(rmb).toString();
            strRMB=numberToZH(strRMB,true);
            if (strRMB.indexOf("点")>=0){
                strRMB = strRMB + "零";
                strRMB = strRMB.replaceAll("点","圆");
                String s1 = strRMB.substring(0,strRMB.indexOf("圆")+1);
                String s2 = strRMB.substring(strRMB.indexOf("圆")+1);
                strRMB=s1 + s2.charAt(0) + "角" + s2.charAt(1) + "分整";
            }else {
                strRMB=strRMB+"圆整";
            }
            return "人民币(大写):" + strRMB;
        }
        
        public static void main(String[] args) {
            System.out.println(numberToRMB(342345.96));
        }
    }
    -----------------------------------------------
    人民币(大写):叁拾肆万贰仟叁佰肆拾伍圆玖角陆分整
      

  3.   

    多谢 trumplet(检查)  共享
      

  4.   

    import java.io.*;public class TestList {
      public static void main(String[] args) {
          File path = new File(".");
          String[] list;
          list = path.list();
          for(int i = 0; i < list.length; i++)
            System.out.println(list[i]);
      }
    }
    列出当前目录下所有文件的例子,请各位大侠斧正
      

  5.   

    我觉得大整数相加减最好是转成字符串来做用BigDecimal安全吗?学习
      

  6.   

    2、给出大整数加减法的实现思路,例如,199999999999999998+333333333333333333333,或者
    123444444444447654-999999999999988877。这个问题不是叫你去调用 BigDecimal的方法, 如果是这样,那还要做吗
    而是叫你实现自己的 BigDecimal ,但只要实现 加, 减 方法而已
      

  7.   

    谢谢各位有心人了。
    第2题实现自己的 BigDecimal,这是什么意思啊?难道自己写加减的方法?
      

  8.   

    楼主,aChinese(一个中国人) 是把你的问题考虑复杂了,它以为你想自己开发一个计算大整数的程序呢。
      

  9.   

    大数超过了long所在的范围,不能直接加减,可以将其转化成字符串,进行运算