Odejmowanie, dodawanie i mnożenie wielkich liczb
Ostatnio zmodyfikowano 2011-12-06 08:11
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:
#include <stdio.h> int main() { int l1, l2, warunek; 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; 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 ) 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.
#include <stdio.h> int main() { int l1, l2, warunek, n; 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 ] ); } }
|
|
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. |
|
« 1 » |