Дан двунаправленный список целых чисел. Вставить перед каждым элементов, являющимся числом Фибоначчи, элемент равный сумме цифр этого числа
#include <iostream>
using namespace std;
struct list
{
int info;
list* next;
list* pred;
};
list* init()
{
int x;
list* p;
list* h = new(list);
cout << "Enter elem" << endl;
cin >> x;
h->info = x;
h->next = NULL;
h->pred = NULL;
p = h;
cout << "Enter elem" << endl;
cin >> x;
while (x != 0)
{
list* q = new(list);
q->info = x;
q->next = NULL;
q->pred = p;
p->next = q;
p = q;
cout << "Enter elem" << endl;
cin >> x;
}
return h;
}
void print(list* p)
{
while (p != NULL)
{
cout << p->info << " ";
p = p->next;
}
}
bool fib(int b)
{
int f1, f2, f3;
f1 = 1;
f2 = 1;
while (b > f1)
{
f3 = f1 + f2;
f1 = f2;
f2 = f3;
}
if (b == f1) return true;
else return false;
}
int sum(list* p)
{
int s = 0;
while (p != NULL)
{
while (p->info > 0)
{
s += p->info % 10;
p->info /= 10;
}
p = p->next;
}
return s;
}
list* ins(list* p, int s)
{
list* r = p;
p = p->next;
while (p != NULL)
{
if (fib(p->info))
{
list* q = new(list);
q->info = s;
q->pred = p->pred;
q->next = p;
p->pred->next = q;
p->pred = q;
}
p = p->next;
}
if (fib(r->info))
{
list* q = new(list);
q->info = s;
q->next = r;
r->pred = q;
q->pred = NULL;
r = q;
}
return r;
}
void main()
{
int x;
list* h = init();
double t = sum(h);
ins(h, t);
print(h);
}
Написала программу, но она почему то выводит 0. Подскажите где ошибка и как ее исправить?
Источник: Stack Overflow на русском