Diskuze: Součet bin. čísel

C a C++ C a C++ Součet bin. čísel

Avatar
RM
Neregistrovaný
Avatar
RM:

Zdravím,
psal jsem teď nedávno program pro sčítání bin. čísel. Př:

Vstup:
10101 101001
Soucet: 111110

Potřeboval bych poradit, jak nejlépe ověřit vstup, aby program vypisoval, např:

Vstup:
10020 1001a0
Nespravny vstup.

Pokud je písmeno na začátku, tak to funguje v pořádku, ale pokud je někde u konce tak to prostě sečte a neřeší podmínku. Díky za radu, můj kód:

#include <cstdlib>
#include <iostream>
#include <stdio.h>

using namespace std;

bool podminka_sprav­nosti(int long number)
{
return ((number % 10 !=0) && (number % 10) !=1);
}

int main() {
long int decimal1, decimal2;
int i=0, zbytek=0, sum[20];

cout << "Zadejte dve binarni cisla:" << endl;
cin >> decimal1 >> decimal2;

if(podminka_sprav­nosti(decimal1) || podminka_sprav­nosti(decimal2)) {
cout << "Nespravny vstup." << endl;
return 0;
}

if(cin.fail()) {
cout << "Nespravny vstup." << endl;
return 0;
}

while ((decimal1 != 0) || (decimal2 != 0)) {
sum[i++] = ((decimal1 % 10) + (decimal2 % 10) + zbytek) % 2;
zbytek = ((decimal1 % 10) + (decimal2 % 10) + zbytek) / 2;
decimal1 = decimal1/10;
decimal2 = decimal2/10;
}

if (zbytek != 0) sum[i++] = zbytek;
--i;

cout << "Soucet: ";
while (i>=0) {
cout << sum[i--];
}
cout << endl;

return 0;
}

 
Odpovědět 5.11.2013 11:39
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na RM
David Čápka:

V tom nenaformátovaném kódu se nevyznám, ale proč prostě neprojedeš for cyklem pole a nekontroluješ to znak po znaku?

Nahoru Odpovědět 5.11.2013 20:41
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Martin Dráb
Redaktor
Avatar
Martin Dráb:

Asi by bylo lepší ta čísla načítat jako řetězce, takhle si příliš nezasčítáš (nevezme to velká čísla). Ta podmínka mi přijde, že kontroluje jen předposlední cifru.

Nahoru Odpovědět 6.11.2013 22:02
2 + 2 = 5 for extremely large values of 2
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.