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

Dodawanie liczb za pomocą stringów

Ostatnio zmodyfikowano 2012-12-08 00:12
Autor Wiadomość
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 ;)
C/C++
#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;
}
P-70312
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ś).
P-70313
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 ;)
P-70353
Badman
» 2012-12-05 08:22:27
C/C++
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.
P-70364
Paulina
Temat założony przez niniejszego użytkownika
» 2012-12-08 00:12:17
Po raz kolejny bardzo serdecznie dziękuję za pomoc ;)
P-70523
« 1 »
  Strona 1 z 1