#include <stdio.h>
#include <string.h>
#define MAX_DIGITS 4096 // Enough to hold 2^1000
void calculate2PowerNAsString(int N, char result[]) {
// Calculate 2^N as a string for large numbers
result[0] = '1';
result[1] = '\0';
int len = 1;
for (int i = 0; i < N; i++) {
int carry = 0;
for (int j = 0; j < len; j++) {
int num = (result[j] - '0') * 2 + carry;
result[j] = (num % 10) + '0';
carry = num / 10;
}
while (carry > 0) {
result[len++] = (carry % 10) + '0';
carry /= 10;
}
result[len] = '\0';
}
}
int sumOfDigits(int N) {
char result[MAX_DIGITS];
calculate2PowerNAsString(N, result);
int sum = 0;
for (int i = 0; result[i] != '\0'; ++i) {
sum += (result[i] - '0');
}
return sum;
}
int main() {
int N;
N = 15;
printf("Sum of digits of 2^%d is: %d\n", N, sumOfDigits(N));
N = 100;
printf("Sum of digits of 2^%d is: %d\n", N, sumOfDigits(N));
N = 1000;
printf("Sum of digits of 2^%d is: %d\n", N, sumOfDigits(N));
return 0;
}
/*
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
*/