Witam,
Moje zadanie to napisać program który liczy sumę dwóch liczb binarnych i wyświetlą ją - bez spacji (niżej dokładne polecenie), no i napisałem programik który na ideone działa prawidłowo, jednak moja uczelniana sprawdzarka wyświetla błąd uruchomienia, nie bardzo wiem o co chodzi bo spr. nie zwraca złej odp. tylko błąd uruchomienia zaś kompilator online nie. Byłbym wdzięczny jak by ktoś rzucił na to oko.
treść zadania:
Dane są dwie liczby, zapisane w postaci binarnej. Oblicz ich sumę, a wynik podaj również w postaci binarnej.
Wejście
W pierwszej linii wejścia znajduje się jedna liczba całkowita d (1 <= d <= 100), która oznacza liczbę zestawów dnych.
Każdy zestaw z czterech linii. W pierwszej znajduje się liczba bitów n (1<=n<=10000), na których zapisana jest pierwsza liczba.
W drugiej znajduje się n cyfr: zer lub jedynek, które oznaczają ową liczbę.
W trzeciej znajduje się liczba bitów m (1<=n<=10000), na których zapisana jest druga liczba.
W czwartej znajduje się m cyfr: zer lub jedynek, które oznaczają ową liczbę.
W zapisie liczb nie ma zer wiodących, tzn. liczba zawsze na pierwszym miejscu posiada 1, chyba, że liczba jest zerem (1 bit równy 0).
Wyjście
Na wyjściu należy dla każdego zestawu danych wypisać ciąg zer i jedynek (bez spacji), który odpowiada zapisowi binarnemu liczbie będącej sumą liczb podanych na wejściu.
Przykład
Wejście:
2
4
1 0 0 1
2
1 1
4
1 1 1 1
6
1 1 1 1 1 1
Wyjście:
1100
1001110
#include <cstdlib>
#include <iostream>
using namespace std;
int potega(int a,int b)
{
if(b==0) return 1;
int temp=1;
for(int j=0; j<b; ++j)
{
temp=temp*a;
}
return temp;
}
int main()
{
int lt=0;
cin>>lt;
for(int p=0; p<lt; ++p)
{
int n=0,m=0,first_n=0,second_n=0,sum=0,c=0;
int *temp=new int[10000];
cin>>n;
int *tab1 = new int[n];
for(int j=0; j<n; ++j) cin>>tab1[j];
for(int i=(n-1),k=0; i>=0; --i,++k)
{
if(tab1[i]==1) first_n=first_n+potega(2,k);
}
cin>>m;
int *tab2 = new int[m];
for(int q=0; q<m; ++q) cin>>tab2[q];
for(int w=(m-1),e=0; w>=0; --w,++e)
{
if(tab2[w]==1) second_n=second_n+potega(2,e);
}
sum=first_n+second_n;
while(true)
{
if(sum==1) {temp[c]=1; break;}
if(sum%2==0){temp[c]=0;sum=sum/2;}
else {temp[c]=1;sum=(sum-1)/2;}
++c;
}
for(int o=c; o>=0; --o)
{
cout<<temp[o];
}
delete[] tab1;
delete[] tab2;
delete[] temp;
}
return 0;
}