Вычисления с большими числами

вот само задание
Безымянный
я написал код создания большого числа, не могу понять что делать дальше, поэтому прошу помощи… вот код, который я написал, то что закомментировано это попытки решения данной задачи

#include <iostream>
#include <string.h>
#include <conio.h>
#include<cmath>
using namespace std;
struct bignumber // описание узла
{
    short digit; // цифра
    bignumber *next; // поле для связи со следующей цифрой числа
};

bignumber * create(char *str) // создание большого числа из текстовой строки
{
    bignumber *p, *top = NULL;
    int i;
    for (i = 0; i<strlen(str); i++)
        {
            p = new bignumber;
            p->digit = short(str[i]) - short('0');
            p->next = top;
            top = p;
        }
    return top;
}

void print(const bignumber * first) // рекурсивная распечатка цифр числа
{
    if (first != NULL) // если ещё не конец числа
    {
        print(first->next); //вызываем печать для старшего разряда
        cout << first->digit; //печать текущего разряда
    }
}

void clear(bignumber ** first) // очистка стека (удаление всех узлов из стека)
{
    bignumber *temp;
    while (*first != NULL) // пока не достигли конца
        {
            temp = (*first)->next; // устанавливаем указатель temp на следующий элемент
            delete *first;
            *first= temp; // переводим указатель на следующий элемент
        }
}
/*
void input_list(bignumber *&first)
{
    int n;
	first = new bignumber;
	first->digit = pow(1, 2);
	bignumber *q = first;
	for (int i = 2; i <= n ; i++)
        {
            q->next = new bignumber;
            q = q->next;
            q->digit = pow(i, 2);
        }
	q->next = 0;
}

void print_sum(bignumber *q)
 {
	unsigned long long sum=0;
	while (q)
        {
            sum+=q->digit;
            q = q->next;
        }
	cout <<"sum = "<<sum<< endl;
}*/
int main()
{
setlocale(LC_ALL, "Russian");
bignumber *first = 0;
char n[256];
cout << "Введите большое число" << endl;
cin >> n;
first = create(n);
cout << "Введенное число:" << endl;
print(first); // распечатка большого числа
cout << endl;
//input_list(first);
//print_sum(first);
cin.get();
clear(&first); // очистка
}

Реализовать операции с большими числами.
В данном случае видимо только сложение.

То есть например функция принимающая два числа и возвращающая сумму.

То есть вы хотите сказать, что код, который создает большое число у меня, он не будет работать для моего задания?

Причем тут создание? Я о том, что надо не только создать, но и что-то сделать с ними )

ну вот то что закомментированно я написал реализацию задания, программа запускается , все работает, но работает не правильно, точнее считает не правильно, я не понимаю в чем ошибка

Вам нужно суммировать возведение в квадратную степень i-го элемента 20000 раз.

не могли бы вы подсказать как это сделать, я не совсем понимаю?

Не надо print_ sum.
Делайте так:

И потом снаружи вызывайте


В итоге должно быть что-то типа:

result = create(0);
for (int i = 1; i <= n; i++)
{
    result = sum(result, i * i);
    // или так если i*i может быть большим
    // result = sum(result, multiply(create(i), create(i)));
}
print(result);

n скорее всего не должно быть большим числом, только результаты вычислений. Если n не влезает в обычные числовые типы, то не хватит ни времени, ни памяти )

Времени то хватит. Только при n=20000 это уже длинная арифметика.
А при использовании стандартных типов данных примерно после 10-й итерации будет затык с вывод значения.
Что-то типа так получится:

// For N = 10
	/**/
	int n(10);
	long double  s(1);
	for (int i=n; i!=0; i--){s=s+pow(s,2); std::cout<<s<<std::endl;}
	/**/
	//For N = 20000
	/*
	int n(20000);
	long double  s(1);
	for (int i=n; i!=0; i--){s=s+pow(s,2); std::cout<<s<<std::endl;}
    */
    std::cout << "For N = " << n << " Sum = ";
	std::cout << /*std::scientific <<*/ std::setprecision(256) << s << std::endl;

После десятой итерации фигня выводится будет в результат.

Я именно про само значение n говорил. Его нет смысла делать длинным.

Потому что даже этот код (без намного более прожорливых вычислений с длинной арифметикой) на 5 ГГц 9900k выполняется 20 сек:

#include <iostream>
#include <limits>
#include <cstdint>
#include <cstdlib>

using namespace std;

int main()
{
    int r;

    for (uint32_t i = 0; i < numeric_limits<uint32_t>::max(); i++) {
        r = rand();
    }

    cout << r;
    return 0;
}

А есть еще uint64_t

А для результатов вычислений да, длинные числа, как в моем примере и как автор и пытается сделать.