Другие языки программирования и технологии

Помогите написать код =)

Получить сумму двух длинных натуральных чисел. Каждое число представлено стеком (информационная часть элементов стека - одна цифра числа ). Результат представлен односвязным линейным списком, информационная часть его элементов аналогична информационной части элемента стека.

На языке программирования С++
#include <iostream>
#include <ctime>
using namespace std;

struct Item
{
char Digit;
Item *Next;
};

void Push(Item **S, char d)
{
Item *P = new Item;
P->Digit = d;
P->Next = *S;
*S = P;
}

char Pop(Item **S)
{
char d = 0;
if (*S != NULL)
{
d = (*S)->Digit;
Item *P = *S;
*S = (*S)->Next;
delete P;
}
return d;
}

void CreateStack(Item **S)
{
char dmin = 1;
int n = rand() % 61 + 10;
for (int i = 0; i < n; i++)
{
char d = rand() % (10 - dmin) + dmin;
cout << static_cast <int> (d);
Push(S, d);
dmin = 0;
}
cout << endl;
}

Item *Add(Item **S1, Item **S2)
{
Item *L = NULL;
char sum = 0;
while (*S1 != NULL || *S2 != NULL)
{
sum += Pop(S1) + Pop(S2);
Push(&L, sum % 10);
sum /= 10;
}
if (sum)
Push(&L, sum);
return L;
}

void WriteList(Item *L)
{
while (L != NULL)
{
cout << static_cast <int> (L->Digit);
L = L->Next;
}
}

void DeleteList(Item **L)
{
while (*L != NULL)
{
Item *P = *L;
*L = (*L)->Next;
delete P;
}
}

int _tmain(int argc, _TCHAR* argv[])
{
srand(static_cast <unsigned> (time(NULL)));
Item *Stack1 = NULL, *Stack2 = NULL, *List;
setlocale(LC_CTYPE, "Russian");
cout << "Первое слагаемое: " << endl;
CreateStack(&Stack1);
cout << "Второе слагаемое: " << endl;
CreateStack(&Stack2);
List = Add(&Stack1, &Stack2);
cout << "Сумма: " << endl;
WriteList(List);
DeleteList(&List);
cin.get();
return 0;
}

Просто переписана на C++ эта программа на Зонноне с добавлением начальной инициализации указателей при объявлении и функции удаления списка DeleteList, так как в нативном C++ отсутствует автоматический сборщик мусора.
СБ
Сергей Батраков
51 590
Лучший ответ
а стек какой? прямой или обратный?
По идее это элементарная операция длинных чисел. Прибавляешь к последней цифре первого числа последнюю цифру второго числа. Если результат больше 9, то отнимаешь 10, откладываешь 1 в уме и записываешь в начало третьего числа.
И так до первого числа длиннейшего стека. Потом выводишь с конца. Вот алгоритм, переводи его в любой нужный язык