StringBuffer rs = new StringBuffer("1");
    for (int i = 1; i <= 1000; i++) {
        StringBuffer tmp_rs = new StringBuffer();
        int carry = 0;
        for (int j = 0; j < rs.length(); j++) {
            char subnum = rs.charAt(j);
            int isubnum = Integer.parseInt(String.valueOf(subnum));
            int product = i * isubnum + carry;
            int mantissa = product % 10;
            carry = product / 10;
            tmp_rs.append(mantissa);
        }
        if (carry != 0)
            tmp_rs.append(carry);
        rs = tmp_rs;
    }
    System.out.println(rs.reverse());一共2594位。

解决方案 »

  1.   

    简单的递归public static String factorial(int num) {
        if (num == 1)
            return "1";
        String subFactorial = factorial(num - 1);
        StringBuffer tmp_rs = new StringBuffer();
        int carry = 0;
        for (int i = subFactorial.length() - 1; i >= 0; i--) {
            char subnum = subFactorial.charAt(i);
            int isubnum = Integer.parseInt(String.valueOf(subnum));
            int product = num * isubnum + carry;
            int mantissa = product % 10;
            carry = product / 10;
            tmp_rs.append(mantissa);
        }
        if (carry != 0)
            tmp_rs.append(carry);
        subFactorial = tmp_rs.reverse().toString();    return subFactorial;
    }