Compute Factorial Digit Sum: Find the sum of the digits in the n

  • 时间:2020-09-10 12:45:51
  • 分类:网络文摘
  • 阅读:139 次

n! means n × (n − 1) × … × 3 × 2 × 1

For example, 10! = 10 × 9 × … × 3 × 2 × 1 = 3628800,
and the sum of the digits in the number 10! is 3 + 6 + 2 + 8 + 8 + 0 + 0 = 27.

Find the sum of the digits in the number 100!

Algorithm to Compute Factorial Digit Sum

Since the factorial could be very large, we need to use an array (or hashmap) to store the digits of the answer. However, in some programming language, large values can be stored e.g. BigInteger in Java or Python.

Similar to Digit factorials: Find the Sum of All the Curious Numbers, we will compute the factorial and store the value in a dictionary.

Then the digits (values of the dictionary) are iterated and sum is obtained via the Array.reduce() function.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
let arr = {
    0: 1
};
 
for (let i = 2; i <= 100; ++i) {
    // multiply by value i
    Object.keys(arr).map(x => {
        arr[x] *= i;
    });
    let c = Math.floor(arr[0] / 10);
    let j = 1;
    arr[0] %= 10;
    // higest position of the value
    const maxKey = Math.max(...Object.keys(arr));
    while ((c > 0) || (j <= maxKey)) {
        if (typeof arr[j] === 'undefined') {
            arr[j] = c;
        } else {
            arr[j] = arr[j] + c;
        }
        // carry over
        c = Math.floor(arr[j] / 10);
        arr[j] %= 10;
        j ++;
    }
}
 
// sum up all the digits of the answer
console.log(Object.values(arr).reduce((a, b) => a + b));
let arr = {
    0: 1
};

for (let i = 2; i <= 100; ++i) {
    // multiply by value i
    Object.keys(arr).map(x => {
        arr[x] *= i;
    });
    let c = Math.floor(arr[0] / 10);
    let j = 1;
    arr[0] %= 10;
    // higest position of the value
    const maxKey = Math.max(...Object.keys(arr));
    while ((c > 0) || (j <= maxKey)) {
        if (typeof arr[j] === 'undefined') {
            arr[j] = c;
        } else {
            arr[j] = arr[j] + c;
        }
        // carry over
        c = Math.floor(arr[j] / 10);
        arr[j] %= 10;
        j ++;
    }
}

// sum up all the digits of the answer
console.log(Object.values(arr).reduce((a, b) => a + b));

–EOF (The Ultimate Computing & Technology Blog) —

推荐阅读:
春节贴对联作文  读《淘气包马小跳之跳跳电视台》有感  我是老师  绍兴环城河作文  春节的民俗作文  三个完全相同的正方形中阴影部分的面积相同吗  正方形的边长是2dm求圆面积  圆形的面积是多少平方厘米  三好学生有几人  正方形分成大小形状相同的四块 
评论列表
添加评论