Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Odejmowanie, dodawanie i mnożenie wielkich liczb

Ostatnio zmodyfikowano 2011-12-06 08:11
Autor Wiadomość
Matti
Temat założony przez niniejszego użytkownika
Odejmowanie, dodawanie i mnożenie wielkich liczb
» 2011-12-05 22:56:48
Witam, na laborki muszę napisać program, który potrafi dodawać, odejmować i mnożyć duże, np. 30-cyfrowe liczby.
Poradziłem sobie z dodawaniem w ten sposób:
C/C++
#include <stdio.h>
int main()
{
    int l1, l2, warunek; // l1 - dlugosc pierwszej liczby, l2 - dlugosc drugiej liczby, warunek - zmienna nadajaca dlugosc tablicy sumujacej
    printf( "Podaj dlugosc 1 liczby: \n" );
    scanf( "%d", & l1 );
    printf( "Podaj dlugosc 2 liczby: \n" );
    scanf( "%d", & l2 );
    int tab1[ l1 ];
    int tab2[ l2 ];
    if( l1 > l2 )
    {
        warunek = l1;
    }
    else
    {
        warunek = l2;
    }
    int tab3[ warunek ];
    int i, j, reszta, wynik;
    for( i = 0; i < warunek; i++ )
    {
        tab1[ i ] = 0;
        tab2[ i ] = 0;
        tab3[ i ] = 0;
    }
    tab3[ warunek ] = 0;
    printf( "Podaj pierwsza liczbe: \n" );
    for( i =( l1 - 1 ); i >= 0; i-- )
         scanf( "%1i", & tab1[ i ] );
   
    printf( "Pierwsza liczba to: \n" );
    for( j = l1 - 1; j >= 0; j-- )
         printf( "%i", tab1[ j ] );
   
    printf( "\nPodaj druga liczbe: \n" );
    for( i =( l2 - 1 ); i >= 0; i-- )
         scanf( "%1i", & tab2[ i ] );
   
    printf( "Druga liczba to: \n" );
    for( j =( l2 - 1 ); j >= 0; j-- )
         printf( "%i", tab2[ j ] );
   
    printf( "\nDodawanie:\n" );
    reszta = 0; // reszta z dodawania dwoch tablic
    for( i = 0; i <= warunek; i++ )
    {
        if( i < warunek )
        {
            wynik = tab1[ i ] + tab2[ i ] + reszta;
            if( wynik > 9 )
            {
                wynik -= 10;
                reszta = 1;
            }
            else
                 reszta = 0;
           
            tab3[ i ] = wynik;
        }
        else
             tab3[ warunek ] = reszta;
       
    }
    if( tab3[ warunek ] != 0 ) // decyzja o wypisaniu pierwszego elementu tablicy
         printf( "%d", tab3[ warunek ] );
   
    for( i = warunek - 1; i >= 0; i-- )
    {
       
        printf( "%d", tab3[ i ] );
    }
   
}

I postanowiłem zmodyfikować ten program na odejmujący. Siedziałem przy tym długo, niestety skutkowało to jedynie drobnymi sukcesami... Program odejmuje, ale nie wszystko. Nigyd nie pojawiają się w nim ujemne liczby. ;\ Czy ktoś mógłby mi wskazać, gdzie jest błąd, albo jak napisać warunki w pętli, aby wychodziły poprawne wyniki? Miałem już tyle pomysłów i po tym wszystkim mam mętlik w głowie.
C/C++
#include <stdio.h>
int main()
{
    int l1, l2, warunek, n; // l1 - dlugosc pierwszej liczby, l2 - dlugosc drugiej liczby, warunek - zmienna nadajaca dlugosc tablicy sumujacej
    printf( "Podaj dlugosc 1 liczby: \n" );
    scanf( "%d", & l1 );
    printf( "Podaj dlugosc 2 liczby: \n" );
    scanf( "%d", & l2 );
    int tab1[ l1 ];
    int tab2[ l2 ];
    if( l1 > l2 )
    {
        warunek = l1;
    }
    else
    {
        warunek = l2;
    }
    int tab3[ warunek ];
    int i, j, reszta, wynik;
    for( i = 0; i < warunek; i++ )
    {
        tab1[ i ] = 0;
        tab2[ i ] = 0;
        tab3[ i ] = 0;
    }
    tab3[ warunek ] = 0;
    printf( "Podaj pierwsza liczbe: \n" );
    for( i =( l1 - 1 ); i >= 0; i-- )
         scanf( "%1i", & tab1[ i ] );
   
    printf( "Pierwsza liczba to: \n" );
    for( j = l1 - 1; j >= 0; j-- )
         printf( "%i", tab1[ j ] );
   
    printf( "\nPodaj druga liczbe: \n" );
    for( i =( l2 - 1 ); i >= 0; i-- )
         scanf( "%1i", & tab2[ i ] );
   
    printf( "Druga liczba to: \n" );
    for( j =( l2 - 1 ); j >= 0; j-- )
         printf( "%i", tab2[ j ] );
   
    printf( "\nOdejmowanie:\n" );
    for( i = 0; i < warunek; i++ )
    {
        if( i == warunek )
        {
            wynik = tab1[ i ] - tab2[ i ];
            tab3[ i ] = wynik;
        }
        if( tab1[ i ] >= tab2[ i ] )
        {
            wynik = tab1[ i ] - tab2[ i ];
            tab3[ i ] = wynik;
           
        }
        else
        {
            tab1[ i ] += 10;
            n = 1;
            while( n < warunek )
            {
                if( tab1[ i - n ] == 0 )
                     n++;
               
            }
            else
            {
                tab1[ i + n ] -= 1;
                wynik = tab1[ i ] - tab2[ i ];
                tab3[ i ] = wynik;
                n = warunek;
            }
        }
    }
    printf( "\n" );
    for( i = warunek - 1; i >= 0; i-- )
    {
       
        printf( "%d", tab3[ i ] );
    }
   
}
P-45206
GoldWolf
» 2011-12-06 08:11:46
Naucz się najpierw deklarować tabele, bo tak jak to zrobiłeś to raczej w marzeniach będzie Ci działać. Jak poprawisz tabele, to może się okazać, że uzyskasz to co chcesz. Odsyłam do kursu: Tablice zmiennych.
P-45209
« 1 »
  Strona 1 z 1