Witam
Od dłuższego czasu męczę się nad napisaniem mnożenia dużych liczb.
Niestety nie zawsze mój program daje dobre odpowiedzi :(
Jeżeli ktoś pomoże odnaleźć błąd będę wdzięczny.

#include <cstdio>
#include <cstring>

const int base=1000000000;
const int cyfr=9;
const int max=10000;
const int maxdlugosc=10002;

struct liczba
{
   int dlugosc;
   int dane[max];
};

liczba toLiczba(char x[])// zmienna znakowa zamieniam na typ liczba
{
   int i,n,pot;
   liczba wynik;
   wynik.dlugosc=0;
   n=strlen(x);

   for(i=0;i<n;i++)
   {
      if(i%cyfr==0)
      {
         pot=1;
         wynik.dlugosc++;
         wynik.dane[i/cyfr]=0;
      }
      wynik.dane[i/cyfr]+=(x[n-i-1]-'0')*pot;
      pot*=10;
   }
   return wynik;
}

void wypisz(liczba x) //funkcja wypisuje dane typu liczba
{
   int i;
   printf("%d",x.dane[x.dlugosc-1]);
   for(i=x.dlugosc-2;i>=0;i--)
   {
      printf("%0*d",cyfr,x.dane[i]);
   }
   printf("\n");
}

liczba pomnoz(liczba a, liczba b)
{
   int x,y;
   unsigned long long temp, dalej;
   int i,j;
   liczba wynik;

   wynik.dlugosc=0;
   x=a.dlugosc;
   y=b.dlugosc;
   temp=0;
   dalej=0;
   for(i=0;i<x;i++)
   {
      j=0;
      ++wynik.dlugosc;
      wynik.dane[wynik.dlugosc-1]=dalej;
      dalej=0;
      while(j<=i&&j<y)
      {
         temp=(long long )a.dane[i-j]*b.dane[j];
         dalej+=(wynik.dane[wynik.dlugosc-1]+temp)/base;
         wynik.dane[wynik.dlugosc-1]=(wynik.dane[wynik.dlugosc-1]+temp)%base;
         j++;
      }
   }
   for(i=1;i<y;i++)
   {
      j=x-1;
      ++wynik.dlugosc;
      wynik.dane[wynik.dlugosc-1]=dalej;
      dalej=0;
      while(j>=0&&(x-j)<y)
      {
         temp=(long long)a.dane[j]*b.dane[x-j];
         dalej+=(wynik.dane[wynik.dlugosc-1]+temp)/base;
         wynik.dane[wynik.dlugosc-1]=(wynik.dane[wynik.dlugosc-1]+temp)%base;
         j--;
      }
   }
   if(dalej>0)
   {
      wynik.dane[wynik.dlugosc++]=dalej;
   }
   return wynik;

}
int main()
{
   char s1[maxdlugosc];
   liczba l1,l2;
   int t;

   scanf("%d",&t);
   while(t--)
   {
      scanf("%s",s1);
      l1=toLiczba(s1);
      scanf("%s",s1);
      l2=toLiczba(s1);
      wypisz(pomnoz(l1,l2));
   }
   return 0;
}