Написание текстового файла при выполнении некоторых вычислений - PullRequest
0 голосов
/ 30 октября 2019

Я пытаюсь создать программу, которая выводит в текстовый файл результаты гипотезы Коллатца . Однако, когда я пытаюсь сделать это с большими числами, такими как 1 000 000, он не работает должным образом и всегда останавливается на 113383.

Вот код:

int n, count, number, mayor, masvueltas, top;
char c = '@';
freopen("output MILLION.txt", "w", stdout);
count = 0;
number = 1;
mayor = 0;
masvueltas = 0;
while(number != 1000000) {
    printf("\n%d did ", number);//this will say that number did COUNT loops
    n = number;
    while (n != 1) {
        if (n % 2 == 0) {
            n = n / 2;
            count++;
        }
        else {
            n = 3 * n + 1;
            count++;
        }
    }
    printf(" %d saltos.\n", count);//Here continoues the sentence
    char graf[count];//creates an array to print the @ character COUNT times
    for (int i = 0; i < count; i++) {
        graf[i] = c;
        printf("%c", graf[i]);
    }
    if(masvueltas < count) {
        masvueltas = count;
        mayor = number;
    }
    number++;
    count = 0;
}

Также, если вы знаете, какраспечатать ASCII-символ 219, block, было бы здорово. Это не важно, поэтому у меня есть более чистый текстовый файл.

1 Ответ

0 голосов
/ 31 октября 2019

Это произошло потому, что для number = 113 383 расчеты достигают значения 827 374 449 после 119 подсчетов, при следующем подсчете максимальное значение составляет 2,482,111,348, что превышает максимальное значение для переменной int 2,147,483,647 , что составляетзначение n становится отрицательным, -1812855948, и цикл не достигает 1. Вы должны использовать long long n вместо того, чтобы получить желаемые результаты. Я также рекомендую использовать цикл for вместо цикла while.

...