Witam mam problem z programem ,który miałby dodawać dwie bardzo duże liczby. wydaje mi się,że algorytm jest dobry,ale mimo to program w pewnym momencie źle dodaje. bardzo prosiłbym o szybką pomoc w znalezieniu i naprawieniu tego błędu,gdyż jest to mój projekt na zaliczenie z informatyki,a termin tuż tuż :/ . z góry dzięki. a oto i program:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
int main(void)
{
char *licza, *liczb, *wynik,temp;
int n,k,l,i,w,wstale;
printf("Ilo cyfrowa bedzie pierwsza liczba? \n");
scanf("%d",&n);
printf("Ilo cyfrowa bedzie druga liczba? \n");
scanf("%d",&k);
//dynamiczna deklaracja tablic
licza=(char *)malloc(n*sizeof(char));
liczb=(char *)malloc(k*sizeof(char));
//dynamiczna deklaracja tablicy wyniku
if(n>k)
{
w=n+1;
wstale=w;
wynik=(char *)malloc((n+2)*sizeof(char));
for(i=0;i<=n;i++)
wynik[i]=48;
wynik[n+1]='\0';
}
else
{
w=k+1;
wstale=w;
wynik=(char *)malloc((k+2)*sizeof(char));
for(i=0;i<=k;i++)
wynik[i]=48;
wynik[k+1]='\0';
}
//puts(wynik);
printf("Podaj pierwsza liczbe \n");
scanf("%s",licza);
printf("Podaj druga liczbe \n");
scanf("%s",liczb);
for(w--,l=n-1,i=k-1;w>=0;l--,i--,w--)
{
if(l>=0 && i>=0)
{
temp=licza[l]+(liczb[i]-48);
if(temp>=58)
{
wynik[w]+=(temp-58);
wynik[w-1]++;
}
else
wynik[w]+=(temp-48); //48 to wartosc dla zera w ASCII
}
if(l>=0 && i<0)
{
if(wynik[w] != 48)
{
temp=licza[l]+wynik[w]-48;
if(temp>=58)
{
//
wynik[w]+=(temp-58);
wynik[w-1]++;
}
else
wynik[w] += (temp-48);
}
else
wynik[w]=licza[l];
}
if(i>=0 && l<0)
{
if(wynik[w] != 48)
{
temp=liczb[i]+wynik[w]-48;
if(temp>=58)
{//
wynik[w]+=(temp-58);
wynik[w-1]++;
}
else
wynik[w] += (temp-48);
}
else
wynik[w]=liczb[i];
}
}
//sprawdzenie czy pierwsza cyfra w liczbie to zero, jesli tak, to wypisujemy od drugiej
if(wynik[0]=='0')
i=1;
else
i=0;
//wypisanie wyniku
printf("Suma=");
for(;i<wstale;i++)
printf("%c" , wynik[i]);
printf("\n");
free(licza);
free(liczb);
free(wynik);
system("PAUSE");
return EXIT_SUCCESS;
}