Power Digit Sum: What is the sum of the digits of the number 2^1

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

215 = 32768 and the sum of its digits is 3 + 2 + 7 + 6 + 8 = 26.
What is the sum of the digits of the number 2
1000?

You probably can compute the direct value of 2^1000. For example, in Python, you can obtain value of (2**1000) and convert it to string. In Java, you can use BigInteger to compute the value of two to the power of 1000.

We can use an array, or hash map to store the digits of any big number. Each time we multiple each position (the values) of the array/hashmap by two, then we need to start from the ‘One’ position to carry over the digits.

The following Javascript code first computes the value of 21000 (values store in a dictionary), then compute the sum of all the digits using reduce() method.

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
let arr = {
    0: 1
};
 
for (let i = 1; i <= 1000; ++i) {
    // multiple each digit by two
    Object.keys(arr).map(x => {
        arr[x] *= 2;
    });
    let c = Math.floor(arr[0] / 10);
    let j = 1;
    arr[0] %= 10;
    // highest position
    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;
        }
        c = Math.floor(arr[j] / 10);
        arr[j] %= 10;
        j ++;
    }
}
 
// sum up all the digits
console.log(Object.values(arr).reduce((a, b) => a + b));
let arr = {
    0: 1
};

for (let i = 1; i <= 1000; ++i) {
    // multiple each digit by two
    Object.keys(arr).map(x => {
        arr[x] *= 2;
    });
    let c = Math.floor(arr[0] / 10);
    let j = 1;
    arr[0] %= 10;
    // highest position
    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;
        }
        c = Math.floor(arr[j] / 10);
        arr[j] %= 10;
        j ++;
    }
}

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

The answer is 1366.

Based on the same algorithm, we can solve another math puzzle: Compute Factorial Digit Sum: Find the sum of the digits in the number 100!

–EOF (The Ultimate Computing & Technology Blog) —

推荐阅读:
夏季凉拌西红柿时用蜂蜜更滋补  对大豆制品存在的一些认识误区  食品安全:广州镉超标大米事件追踪  味精的食用安全性及合适用量问题  食品安全问题并不是食品添加剂的错  温州苍南黑作坊两年产千吨剧毒湿米面  食药监总局提醒注意保健食品五大陷阱  对儿童健康成长有益的六大食物  健康养生:七种常见的黑色滋补食物  竹炭食品排毒就是一个忽悠人的概念 
评论列表
添加评论