я написал код создания большого числа, не могу понять что делать дальше, поэтому прошу помощи… вот код, который я написал, то что закомментировано это попытки решения данной задачи
#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); // очистка
}
ну вот то что закомментированно я написал реализацию задания, программа запускается , все работает, но работает не правильно, точнее считает не правильно, я не понимаю в чем ошибка
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;
После десятой итерации фигня выводится будет в результат.