import Foundation
func calculate2PowerNAsDigits(_ n: Int) -> [Int] {
var digits = [1] // Least significant digit first
for _ in 1...n {
var carry = 0
for i in 0..<digits.count {
let num = digits[i] * 2 + carry
digits[i] = num % 10
carry = num / 10
}
while carry > 0 {
digits.append(carry % 10)
carry /= 10
}
}
return digits
}
func sumOfDigits(ofPower exponent: Int) -> Int {
let digits = calculate2PowerNAsDigits(exponent)
return digits.reduce(0, +)
}
let testCases = [15, 100, 1000]
for n in testCases {
print("Sum of digits of 2^\(n) is: \(sumOfDigits(ofPower: n))")
}
/*
run:
Sum of digits of 2^15 is: 26
Sum of digits of 2^100 is: 115
Sum of digits of 2^1000 is: 1366
*/