/** * Created by IntelliJ IDEA. * User: shuimuqinghua77 * Date: 11-12-15 * Time: 下午1:25 */ public class Problem20 {
public static void main(String[] args) throws Exception {
byte[] result = digit(1); for (byte i = 1; i <= 100; i++) { result = multiply(digit(i), result); }
int sum = 0; for (byte digit : result) { sum += digit; } System.out.println(sum);
}
private static byte[] multiply(byte[] multiplicand/**被乘数**/, byte[] multiplier) throws Exception { if (multiplicand.length == 0 || multiplier.length == 0) { throw new Exception("被乘数/乘数为空!!!"); } if (multiplicand.length < multiplier.length) { byte[] temp = multiplier; multiplier = multiplicand; multiplicand = temp; } byte[] result = new byte[multiplicand.length + multiplier.length]; for (int i = 0; i < multiplier.length; i++) { for (int j = 0; j < multiplicand.length; j++) { result[i + j] += (byte) (multiplier[i] * multiplicand[j]); } /**[29]->[9][2]进位**/ carry(result, 1 + multiplicand.length, i); } if (result[result.length - 1] == 0) { byte[] resultDest = new byte[result.length - 1]; System.arraycopy(result, 0, resultDest, 0, result.length - 1); return resultDest; }
return result; }
private static void carry(byte[] result, int length, int base) { for (int i = base; i < length + base; i++) { byte decade = (byte) (result[i] / 10); if (decade >= 1) { result[i + 1] += decade; result[i] = (byte) (result[i] % 10); } }
}
private static byte[] digit(int original) { List<Byte> list = new ArrayList<Byte>(); do { list.add((byte) (original % 10)); original = original / 10; } while (original > 0); byte[] digit = new byte[list.size()]; for (int i = 0; i < list.size(); i++) { digit[i] = list.get(i); } return digit; } }