Suma binarna w C++

0

Cześć.

Od dłuższego czasu mam problem z zadaniem, które pojawiło się już na tym forum 4programmers.net/Forum/Newbie/197592-suma_binarna suma binarna dwóch liczb. Próbuje to rozwiązać na własny sposób, ale ciągle coś jest nie tak.
Proszę o podpowiedź, gdzie popełniam błąd ;)

#include <iostream>
#include <algorithm>
using namespace std;
 
int main()
{
    ios_base::sync_with_stdio(0);
    short int n,m,d,maks;
    short int suma=0;
    bool reszta=0;
    int koniec=1;
 
    cin>> d;
    for (int i=0;i<d;++i){
 
        bool *pierwsza =new bool[10000];
        bool *druga =new bool[10000];
 
        cin>> n;
        for(int i=10000-n;i<10000;++i) {
            cin>>pierwsza[i];
            }
 
        cin>> m;
        for(int i=10000-m;i<10000;++i) {
            cin>>druga[i];
        }
 
        maks=max(n,m);
 
        if(n==1 && pierwsza[10000-1]==0){
            for(int i=10000-maks;i<10000;++i) cout<<druga[i];
            continue;
        }else if(m==1 && druga[10000-1]==0){
            for(int i=10000-maks;i<100001;++i) cout<<pierwsza[i];
            continue;
        }else{
            for(int i=10000-1;i>=10000-maks; --i)
            {
                suma=pierwsza[i]+druga[i]+reszta;
                if(suma==0){
                    pierwsza[i]=0;
                    reszta=0;
                }else if(suma==1){
                    pierwsza[i]=1;
                    reszta=0;
                }else if(suma==2){
                    pierwsza[i]=0;
                    reszta=1;
                }else if(suma==3){
                    pierwsza[i]=1;
                    reszta=1;
                }
            }
        suma=0;
        if(reszta==1){
            cout<<koniec;
            reszta=0;
        }
        reszta=0;
 
        for(int i=10000-maks;i<10000;++i) cout<<pierwsza[i];
        cout<<endl;
    }
    delete [] pierwsza;
    delete [] druga;
    }
 
}
1

Pseudokod dla samego algorytmu dodawania, krótszą liczbę(tablicę) trzeba uzupełnić wcześniej zerami do długości dłuższej, działa na tablicach integerów:

def add_bin(a, b):
	reverse(a)
	reverse(b)
    out = tablica o długości 1 + długość a lub b
    carry_bit = 0
    for i from 0 to length(a):
        out[i] = (a[i] + b[i] + carry_bit) % 2
        carry_bit = (a[i] + b[i] + carry_bit) // 2

    if carry_bit > 0:
        out[i+1] = carry_bit

    reverse(out)
    out = remove_leading_zeroes(out)
    return out
0

Dziękuję za pomoc! Zamieściłem swój kod na Ideone, gdyby ktoś miał pomysł jak mogę go jeszcze upiększyć lub uprościć, to jestem głodny uwag.

1

Mozesz, Jakbyś dodawanie zamkął w funkcji to byłoby czytelniej.

1 użytkowników online, w tym zalogowanych: 0, gości: 1