File tree 1 file changed +45
-0
lines changed 1 file changed +45
-0
lines changed Original file line number Diff line number Diff line change
1
+ /**
2
+ * Problem 16 - Power digit sum
3
+ *
4
+ * @see {@link https://projecteuler.net/problem=16 }
5
+ *
6
+ * 2¹⁵ = 32768 and the sum of its digits is 3 + 2 + 7 + 6 + 8 = 26.
7
+ *
8
+ * What is the sum of the digits of the number 2¹⁰⁰⁰ ?
9
+ */
10
+
11
+ /**
12
+ * Returns the power digit sum of n^pow.
13
+ *
14
+ * @param {number } [n=2]
15
+ * @param {number } [pow=1000]
16
+ * @returns {number }
17
+ */
18
+ const powerDigitSum = function ( n = 2 , pow = 1000 ) {
19
+ // The idea is to consider each digit (d*10^exp) separately, right-to-left.
20
+ // digits = [units, tens, ...]
21
+
22
+ const digits = [ n ]
23
+ let p = 1
24
+
25
+ while ( ++ p <= pow ) {
26
+ let carry = 0
27
+ for ( let exp = 0 ; exp < digits . length ; exp ++ ) {
28
+ const prod = digits [ exp ] * n + carry
29
+ carry = Math . floor ( prod / 10 )
30
+ digits [ exp ] = prod % 10
31
+ }
32
+ while ( carry > 0 ) {
33
+ digits . push ( carry % 10 )
34
+ carry = Math . floor ( carry / 10 )
35
+ }
36
+ }
37
+
38
+ // (digits are reversed but we only want the sum so it doesn't matter)
39
+
40
+ return digits . reduce ( ( prev , current ) => prev + current , 0 )
41
+ }
42
+
43
+ console . log ( 'Power digit sum of 2^1000 :' , powerDigitSum ( ) )
44
+
45
+ module . exports = powerDigitSum
You can’t perform that action at this time.
0 commit comments