Dodawanie liczb za pomocą stringów
Ostatnio zmodyfikowano 2012-12-08 00:12
Paulina Temat założony przez niniejszego użytkownika |
Dodawanie liczb za pomocą stringów » 2012-12-03 23:51:20 Witam wszystkich. Otóż mój problem jest nastepujący. Mam napisany program, który, tak jak w temacie, ma za zadanie dodawać dwie duże liczby, dlatego program napisany jest za pomocą stringów. Zwracam się do Was z prośbą, czy byłby ktos w stanie przeanalizować i w komentarzach wyjaśnić mi działanie tego programu? Potrzebuję zapoznać sie z nim dosłownie linijka po linijce, żebym mogła potem sama pisać podobne programy ;) Tylko prosze, jeżeli ktos nie chce pomóc, to niech nawet nie komentuje, zwróciłam się z prośbą do osób chętnych i wyrozumiałych. Z góry dziękuję za poświęcony czas i pozdrawiam ;) #include <iostream> #include <string> #include <sstream>
using namespace std;
int main() { string liczba1, liczba2; cin >> liczba1; cin >> liczba2; stringstream s; for( int i = liczba1.size() - 1; i >= 0; i-- ) s << liczba1[ i ]; liczba1 = s.str(); s.str( "" ); for( int i = liczba2.size() - 1; i >= 0; i-- ) s << liczba2[ i ]; liczba2 = s.str(); int max =( liczba1.size() >= liczba2.size() ? liczba1.size() : liczba2.size() ); stringstream suma; int pod, dod = 0; for( int i = 0; i < max; i++ ) { if( liczba1.size() > i && liczba2.size() > i ) { pod =( char ) liczba1[ i ] - 48 +( char ) liczba2[ i ] - 48; } else { pod =( liczba1.size() > liczba2.size() ?( char ) liczba1[ i ] - 48 :( char ) liczba2[ i ] - 48 ); } pod += dod; if( pod > 9 ) { dod = 1; suma << pod % 10; } else { suma << pod; dod = 0; } } if( dod ) { suma << dod; } string wynik = suma.str(); for( int i = wynik.size() - 1; i >= 0; i-- ) { cout << wynik[ i ]; } cout << endl; return 0; } |
|
Mrovqa |
» 2012-12-04 08:10:55 Jeżeli dodawanie dwóch wielkich liczb za pomocą stringów to pewnie jest to dodawanie pisemne, które powinnaś znać z podstawówki :) (aha, i da się to zrobić nieco wydajniej niż na tym kodzie, co zamieściłaś). |
|
Paulina Temat założony przez niniejszego użytkownika |
» 2012-12-04 21:04:31 Może i można łatwiej i inaczej, ale taki kod mieliśmy podany i chciałabym go zrozumiec po prostu ;)
|
|
Badman |
» 2012-12-05 08:22:27 for( int i = 0; i < max; i++ ) { if( liczba1.size() > i && liczba2.size() > i ) { pod =( char ) liczba1[ i ] - 48 +( char ) liczba2[ i ] - 48;
powyższa pętla przechodzi przez kolejne elementy łańcuchów tekstowych liczba1, liczba2 i na podstawie ich wartości wylicza wartość pod.
niech liczba1 zawiera tekst 18, a liczba2 zawiera tekst 33.
Algorytm taki jak w szkole dodawanie pisemne słupkowe :)
W pierwszej kolejności brana wartość 8 rzutowana na bajt (char), czyli dla litery 8 w kodzie ASCII ma wartość 56, następnię odejmuje się 48, ponieważ 0 w kodzie ASCII ma tą wartość, póżniej dodanie wartośći z rzutowanej 3 na bajt, czyli 51 - 48.
56-48=8 i 51-48=3 i wten magiczny sposób litera "staje się" cyfrą w systemie dziesiętnym...
Dalej to dopowiedz sobie sama. |
|
Paulina Temat założony przez niniejszego użytkownika |
» 2012-12-08 00:12:17 Po raz kolejny bardzo serdecznie dziękuję za pomoc ;) |
|
« 1 » |