Проблема с большими числами в C - PullRequest
0 голосов
/ 05 июня 2011

почему код, подобный этому, должен давать такой высокий результат, когда я даю ему номер 4293974227 (или выше)

int main (int argc, char *argv[])
{


unsigned long long int i;

unsigned long long int z = atoi(argv[1]);

unsigned long long int tmp1 = z;


unsigned long long int *numbers = malloc (sizeof (unsigned long long int) * 1000);

for (i=0; tmp1<=tmp1+1000; i++, tmp1++) {

    numbers[i] = tmp1;
    printf("\n%llu - %llu", numbers[i], tmp1);
}

}

Результат должен начинаться с указанного числа, но начинается следующим образом:

18446744073708558547 - 18446744073708558547
18446744073708558548 - 18446744073708558548
18446744073708558549 - 18446744073708558549
18446744073708558550 - 18446744073708558550
18446744073708558551 - 18446744073708558551

ЕСС ...

Что это за хрень ??

Спасибо!

Ответы [ 3 ]

6 голосов
/ 05 июня 2011

atoi() возвращает int.Если вам нужны большие цифры, попробуйте strtol(), strtoll() или их родственников.

3 голосов
/ 05 июня 2011

atoi() возвращает (int) и не может справиться с (long long).Попробуйте atoll() или не получится atol() (предпочтительнее).

0 голосов
/ 05 июня 2011

Вы печатаете целые числа со знаком как без знака.

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