Мне нужно вывести с помощью списка все цифры числа 2 ^ n. Причем n - натуральное число и n> 1000. Не могу с длинной арифметикой

Мне нужно вывести с помощью списка все цифры числа 2 ^ n. Причем n - натуральное число и n> 1000 Насколько я понял здесь нужно использовать длинную арифметику, я пытался это сделать, но еще не имел дела с векторами. Что-то пошло не по плану и код не работает.

#include <iostream>
#include <cmath>
#include <string>
#include <vector>
using namespace std;

typedef struct vertex //створення типу даних STACK
{
    char ch; //інформаційна частина
    struct vertex *next; //вказівник на вузол стеку
} STACK;

int main() {
    int N, p;
    cout << "Enter a positive integer (N > 1000): ";
    while (cin >> p) {
        if (p > 1000) {
            N = p;
            break;
        }
        else {
            cerr << "Prerequisite: N > 1000!!! Try another number!" << endl;
            cout << "Enter a positive integer (N > 1000): ";
        }
    }
    typedef vector<int> lnum;
    const int base = 1000*1000*1000;
    string a = "2", b = a;
    lnum c (a.size()+b.size());
    for (int j = 1; j < N; j++) {
        for (size_t i=0; i<a.size(); ++i)
            for (int j=0, carry=0; j<(int)b.size() || carry; ++j) {
                long long cur = c[i+j] + a[i] * 1ll * (j < (int)b.size() ? b[j] : 0) + carry;
                c[i+j] = int (cur % base);
                carry = int (cur / base);
            }
        while (c.size() > 1 && c.back() == 0)
            c.pop_back();
    }
    STACK *head, *q = nullptr; //вказівники на вузол стек
    //head - вершина стек
    head = NULL; //стек порожній
    for (int i = 0; i < a.size(); i++) { //цикл заповнення стеку
        q = new STACK; //створення нового вузла стеку
        q->ch = a[i]; //заповнення нового вузла
        q->next = head; //включення нового вузла у стек
        head = q; //head знову вказує на вершину стеку
    }
    //вивід вмістимого стеку
    cout << "2 ^ " << N << " = ";
    while (head->next != NULL) //якщо у стеку є більше, ніж один елемент
    {
        head = q->next;//перевтсановлення вершини
        delete q;//видалення останнього елемента стеку
        q = head;//head, q знову вказують на вершину
        cout << head->ch;//друк інформаційної частини
    }
    cout << endl;
    return 0;
}

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