Obsługa dużych liczb w kalkulatorze
Ostatnio zmodyfikowano 2011-12-16 08:45
xxdamiianxx Temat założony przez niniejszego użytkownika |
Obsługa dużych liczb w kalkulatorze » 2011-12-14 17:20:28 Pisze program który działa jak prosty kalkulator ale bez ograniczeń co do wielkości liczb. Napisałem kod na razie dla samego dodawania pobieram liczby do tablicy i kolejne cyfry zapisuje w kolejnych indeksach tablicy i po prostu pisemnie dodaje. Jednak jest gdzieś jest błąd bo dla małych liczb zwraca dobry wynik ale już dla 5 cyfrowych zły w tablicy pojawiają się minusy. Może ktoś znajdzie błąd. Kod programu: #include <iostream> #include <conio.h>
using namespace std; int dlugosc( char tab[ 10 ] ) { int i = 0; while( tab[ i ] != '\0' ) { i++; }; return i; }; int charTOint( char a ) { return int( a - 48 ); }
int main() { cout << "program wykonuje obliczenie bez ograniczen co do wielkosci liczb \n"; char tab1[ 10 ], tab2[ 10 ], tab1p[ 10 ], tab2p[ 10 ]; int tab1pp[ 10 ], tab2pp[ 10 ], n1, n2, wynik[ 10 ], r; r = 0; cout << "Podaj dwie duze liczby:"; cin >> tab1; cin >> tab2; n1 = dlugosc( tab1 ) - 1; n2 = dlugosc( tab2 ) - 1; for( int i = 0; i < 10; i++ ) { tab1p[ i ] = tab1[ n1 - i ]; if( i <( 9 - n1 ) ) { tab1pp[ i ] = 0; } else { tab1pp[ i ] = charTOint( tab1p[ 9 - i ] ); }; tab2p[ i ] = tab2[ n2 - i ]; if( i <( 9 - n2 ) ) { tab2pp[ i ] = 0; } else { tab2pp[ i ] = charTOint( tab2p[ 9 - i ] ); }; }; cout << "\n wynik to:"; for( int i = 0; i < 10; i++ ) { wynik[ 9 - i ] =( tab1pp[ 9 - i ] + tab2pp[ 9 - i ] ) % 10 + r; int r =( tab1pp[ 9 - i ] + tab2pp[ 9 - i ] ) / 10; }; for( int i = 0; i < 10; i++ ) { cout << wynik[ i ]; }; getch(); return 0; }
|
|
DejaVu |
» 2011-12-14 21:11:00 Polecam poszukać biblioteki do obliczeń matematycznych. Istnieje takowa, jednak jej nazwy nie pamiętam... |
|
diego997 |
» 2011-12-15 19:55:24 Ja bym utworzył dwie tablice dynamiczne typu int i przypisywał do nich wartości przy pomocy funkcji getch() :) |
|
madmike44 |
» 2011-12-16 08:45:49 GNU Multiple Precision Arithmetic Library - http://gmplib.org/Licencja GPL, dobra dokumentacja, biblioteka szybka i o dużych możliwościach. Najlepszy chyba obecnie wybór, jeśli chodzi o takie zadania. |
|
« 1 » |