Dodawanie dwóch dużych liczb

0

Witam, miałem do napisania program, który sumuje dwie bardzo duże liczby. Kod programu mam, tylko, że jest jeden jedyny błąd, a mianowicie generuje mi pięknie dwie duże liczby, z reguły ładnie dodaje, a czemu z reguły? Bo jak np. podam liczbe cyfr pierwszej liczby jako m=4 i liczbe cyfr drugiej liczby jako n=4, to gdy np wygeneruje mi liczby 9876 i 2345 to w wyniku nie ma 12221 tylko 2221, znika to przeniesienie, ale nie wiem dlaczego. Proszę o pomoc :p```

#include<stdlib.h>
#include<ctime>
#define max 1000

int main()
{
    int tab1[max], tab2[max], tab1z[max], tab2z[max], tab3z[max], tab3[max], c, m ,n, i, x;
    printf("Podaj ilosc cyfr pierwszej liczby\n");
    scanf("%d", &n);
    printf("\n");
    printf("Podaj ilosc cyfr drugiej liczby\n");
    scanf("%d", &m);
    printf("\n\n");
    srand(time(NULL));
    
    for(i=0; i<n; i++)
    {
             tab1[i]=rand()%9+1;
    }
    for(i=0; i<m; i++)
    {
             tab2[i]=rand()%9+1;
    }
    printf("Pierwsza liczba to\n");
    for(i=0; i<n; i++)
    {
             printf("%d", tab1[i]);
    }
    printf("\n");
     printf("Druga liczba to\n");
    for(i=0; i<m; i++)
    {
             printf("%d", tab2[i]);
    }      
    printf("\n\n");
    
    for(i=0; i<n; i++)
    {
             tab1z[i]=tab1[n-i-1];
    }
    for(i=0; i<m; i++)
    {
             tab2z[i]=tab2[m-i-1];
    }
    
    
    if(n>m)
    {
            x=n;        
    }
    else
    {
            x=m;
    }
    
    c=0;
    for(i=0; i<x; i++)
    {
               if((tab1z[i]+tab2z[i]+c)>9)
               {
                                    tab3z[i]=tab1z[i]+tab2z[i]+c-10;
                                    c=1;
               }
               else
               {
               					tab3z[i]=tab1z[i]+tab2z[i]+c;
								   	
                                   c=0;
               }
               
    }
    
    
	
    for(i=0; i<x; i++)
    {
             tab3[i]=tab3z[x-i-1];
    }

	
	
	
    
    printf("\n Suma tych cyfr to\n");
    
    
	
    for(i=0; i<x; i++)
    {
             printf("%d",tab3[i]);
    }


    printf("\n");
    
    
    system("PAUSE");
    return 0;
}

0

Z pobieznego przegladania, to x- czyli w Twoim wypadku ilosc cyfr wynikowej liczby jest zle ustalana, jako max z n, m. Nie bierzesz pod uwagę, że może byc "przepelnienie na dodawaniu 2 ostatnich cyfr i potrzebujesz wtedy o 1 znak wiecej.

0

Dobra, już mam kod poprawiony, tak że nie ma tego 0 z przodu. Dzięki za wskazówki.

0

Rozbij ten kod na poszczególne części - wyodrębnij z niego funkcje, struktury - wtedy będziemy mogli porozmawiać.

1 użytkowników online, w tym zalogowanych: 0, gości: 1