Возвести 2 в любую степень до 1000. Почему в output.txt не выводится больше 11 знаков?

#include <iostream>
#include <string.h> 
#include <stdio.h> 
using namespace std;
FILE* stream;
int main() {
    freopen_s(&stream, "input.txt", "r", stdin);
    freopen_s(&stream, "output.txt", "w", stdout);
    unsigned short int n;
    cin >> n;
    if (n == 31) {
        cout << 2147483648 << endl;
    }
    else if (n < 31) {
        cout << pow(2, n);
    }
    else {
        int a[310];
        a[0] = 8;
        a[1] = 4;
        a[2] = 6;
        a[3] = 3;
        a[4] = 8;
        a[5] = 4;
        a[6] = 7;
        a[7] = 4;
        a[8] = 1;
        a[9] = 2;
        unsigned short int i = 32;
        unsigned short int l = 9;
        while(i <= n){
            for (int i = 0; i <= l; i++) {
                a[i] *= 2;
            }
            for (int i = 0; i <= l; i++) {
                if (i == l && a[i] >= 10) {
                    l++;
                }
                a[i + 1] += (a[i] / 10);
                a[i] = a[i] % 10;
            }
            i++;
        }
        a[l] += 10;
        for (int i = l; i >= 0; i--) {
            cout << a[i];
        }
    }
    fclose(stdin); 
    fclose(stdout);
    return 0;
}
                  

Ответы (1 шт):

Автор решения: Mikhailo

Вы как-то неверно обрабатываете перенос. Вот попробуйте так:

#include <iostream>
#include <string.h>
#include <stdio.h>
using namespace std;
FILE* stream;
int a[310];

int main() {
    freopen_s(&stream, "input.txt", "r", stdin);
    freopen_s(&stream, "output.txt", "w", stdout);
    unsigned short int n;
    cin >> n;
    a[0] = 1;
    int sz = 1;       // Размер числа

    for (int i = 0; i < n; ++i) {
        int cr = 0;   // Перенос
        for (int j = 0; j < sz; ++j) {
            a[j] = a[j] * 2 + cr;   // Умножение цифры на 2
            cr = a[j] / 10;         // Поиск переноса
            a[j] %= 10;
            }

        if (cr) a[sz++] = cr;   // При переносе увеличиваем число
        }

    for (int i = sz - 1; i >= 0; i--) {
        cout << a[i];
        }

    fclose(stdin);
    fclose(stdout);
    return 0;
    }
→ Ссылка