Zdravím, mám takový problém s jedním úkolem. Za úkol mám sečíst 2 binární čísla (na řádku oddělena mezerou). Na samotné sčítání jsem přišel(bitové operace), ale stále mám problém se 2 věcmi.
1) ošetření vstupu - víceméně si myslím, že vím jak na to, ale stále mi to nefunguje, jak bych chtěl
Pro binární čísla
abraka1dabra0 1fuj0tajksl1
By měl vyhodit jeden Nespravny vstup.
2) po sčítání zbavit se přebytečných nul
001 000001
Soucet: 10
Co zatím mám:
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
int zbytek=0;
int soucet=0;
string cislo1,cislo2;
string vysledek="";
cout <<"Zadejte dve binarni cisla:"<<endl;
cin >> cislo1;
cin >> cislo2;
for (unsigned int z=0;z<cislo1.length();z++)
{
if (cislo1[z]!='0' || cislo1[z]!='1')
{
cout <<"Nespravny vstup"<<endl;
break;
}
}
for (unsigned int y=0;y<cislo2.length();y++)
{
if (cislo2[y]!='0' || cislo2[y]!='1')
{
cout <<"Nespravny vstup"<<endl;
break;
}
}
int j=cislo2.length()-1;
int i=cislo1.length()-1;
while(j>=0&&i>=0){
soucet=(cislo1[i]-48) ^ (cislo2[j]-48) ^ zbytek;
zbytek=((cislo1[i]-48) & (cislo2[j]-48)) | ((cislo2[j]-48)&zbytek) | (zbytek& (cislo1[i]-48));
vysledek+=(soucet+48);
i=i-1;
j=j-1;
}
while(i>=0){
zbytek=(cislo1[i]-48)&zbytek;
soucet=(cislo1[i]-48)^zbytek;
vysledek+=(soucet+48);
i=i-1;}
while(j>=0){
zbytek=(cislo2[j]-48)&zbytek;
soucet=(cislo2[j]-48)^zbytek;
vysledek+=(soucet+48);
j=j-1;}
if(zbytek)
vysledek+=(zbytek+48);
reverse(vysledek.begin(),vysledek.end());
cout<<"Soucet: " << vysledek << endl;
return 0;
}
Budu rád za jakoukoliv pomoc nebo radu.
Předem děkuji