Мне нужно вывести с помощью списка все цифры числа 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;
}