Problem20

1.package com.yao.shuimu.euler;
2.
3.import java.util.ArrayList;
4.import java.util.List;
5.
6./**
7. * Created by IntelliJ IDEA.
8. * User: shuimuqinghua77
9. * Date: 11-12-15
10. * Time: 下午1:25
11. */
12.public class Problem20 {
13.
14.    public static void main(String[] args) throws Exception {
15.
16.        byte[] result = digit(1);
17.        for (byte i = 1; i <= 100; i++) {
18.            result = multiply(digit(i), result);
19.        }
20.
21.        int sum = 0;
22.        for (byte digit : result) {
23.            sum += digit;
24.        }
25.        System.out.println(sum);
26.
27.    }
28.
29.    private static byte[] multiply(byte[] multiplicand/**被乘数**/, byte[] multiplier) throws Exception {
30.        if (multiplicand.length == 0 || multiplier.length == 0) {
31.            throw new Exception("被乘数/乘数为空!!!");
32.        }
33.        if (multiplicand.length < multiplier.length) {
34.            byte[] temp = multiplier;
35.            multiplier = multiplicand;
36.            multiplicand = temp;
37.        }
38.        byte[] result = new byte[multiplicand.length + multiplier.length];
39.        for (int i = 0; i < multiplier.length; i++) {
40.            for (int j = 0; j < multiplicand.length; j++) {
41.                result[i + j] += (byte) (multiplier[i] * multiplicand[j]);
42.            }
43.            /**[29]->[9][2]进位**/
44.            carry(result, 1 + multiplicand.length, i);
45.        }
46.        if (result[result.length - 1] == 0) {
47.            byte[] resultDest = new byte[result.length - 1];
48.            System.arraycopy(result, 0, resultDest, 0, result.length - 1);
49.            return resultDest;
50.        }
51.
52.        return result;
53.    }
54.
55.    private static void carry(byte[] result, int length, int base) {
56.        for (int i = base; i < length + base; i++) {
57.            byte decade = (byte) (result[i] / 10);
58.            if (decade >= 1) {
59.                result[i + 1] += decade;
60.                result[i] = (byte) (result[i] % 10);
61.            }
62.        }
63.
64.    }
65.
66.
67.    private static byte[] digit(int original) {
68.        List<Byte> list = new ArrayList<Byte>();
69.        do {
70.            list.add((byte) (original % 10));
71.            original = original / 10;
72.        }
73.        while (original > 0);
74.        byte[] digit = new byte[list.size()];
75.        for (int i = 0; i < list.size(); i++) {
76.            digit[i] = list.get(i);
77.        }
78.        return digit;
79.    }
80.}
时间: 2024-09-10 00:42:14

Problem20的相关文章