Вычисление очень длинного числа в программировании на С - PullRequest
0 голосов
/ 23 февраля 2012

Как реализовать программу на c для вычисления 2 ^ 999?

Ответы [ 5 ]

4 голосов
/ 23 февраля 2012
#include <math.h>

double a = pow(2, 999);
4 голосов
/ 23 февраля 2012

Вам нужно использовать большую целочисленную библиотеку, которая работает с массивами произвольного размера. GMP популярен: http://gmplib.org/.

Если вы готовы пожертвовать точностью, вы можете использовать double, который может представлять значения примерно до 1,8 * 10 ^ 308, просто используя pow() (2 ^ 999 = ~ 5,4 * 10 ^ 300).

1 голос
/ 24 февраля 2012
#include <stdio.h>
#include <string.h>

void mul2(char *n){
    int c = 0;
    while(*n){
        int v;
        v  = c + (*n - '0') * 2;
        c  = v / 10;
        *n++ = v % 10 + '0';
    }
    if(c) *n++ = c + '0';
    *n = '\0';
}

void print(char *n){
    strrev(n);
    printf("%s\n", n);
}

int main (void){
    char num[302] = "1";
    int i;
    for(i=0;i<999;i++)
        mul2(num);
    print(num);
    return 0;
}
1 голос
/ 24 февраля 2012

bc имеет встроенную библиотеку bignum и подходит для любой unix-совместимой системы, достойной этого названия.

#include <stdio.h>

main() {
    FILE *p;

    p=popen("bc","w");
    fprintf(p, "2^999\n");
    fflush(p);
    fclose(p);
    exit(0);
}
1 голос
/ 24 февраля 2012
printf("%.0f\n", 0x1p999);

Упс, слишком коротко, поэтому добавляем случайный текст ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...