#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// Maximum number of digits (adjust as needed)
#define MAX_DIGITS 400
// Reverses a string in place
void reverse(char *str) {
int len = strlen(str);
for (int i = 0; i < len / 2; i++) {
char tmp = str[i];
str[i] = str[len - i - 1];
str[len - i - 1] = tmp;
}
}
// Calculates base^exponent and returns result as a string
void CalculateLargeNumbersPower(int base, int exponent, char *result) {
strcpy(result, "1");
for (int i = 0; i < exponent; i++) {
int carry = 0;
int len = strlen(result);
for (int j = 0; j < len; j++) {
int num = (result[j] - '0') * base + carry;
result[j] = (num % 10) + '0';
carry = num / 10;
}
while (carry > 0) {
result[len++] = (carry % 10) + '0';
carry /= 10;
result[len] = '\0';
}
}
reverse(result);
}
int main() {
int base = 2, exponent = 15;
char result[MAX_DIGITS];
CalculateLargeNumbersPower(base, exponent, result);
printf("2^15 = %s\n", result);
// Convert string to long long (only if it fits)
long long num = atoll(result);
printf("As number: %lld\n", num);
base = 2;
exponent = 100;
CalculateLargeNumbersPower(base, exponent, result);
printf("2^100 = %s\n", result);
// Store digits in an array
int digits[MAX_DIGITS];
int len = strlen(result);
for (int i = 0; i < len; ++i) {
digits[i] = result[i] - '0';
}
printf("Digits: ");
for (int i = 0; i < len; ++i) {
printf("%d", digits[i]);
}
printf("\n");
return 0;
}
/*
run:
2^15 = 32768
As number: 32768
2^100 = 1267650600228229401496703205376
Digits: 1267650600228229401496703205376
*/