How to calculate power for large numbers in C

1 Answer

0 votes
#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

*/



 



answered Aug 2, 2025 by avibootz

Related questions

2 answers 72 views
1 answer 104 views
1 answer 78 views
1 answer 82 views
1 answer 94 views
1 answer 86 views
...