Mit modolo 10 bekommst immer genau die letze Ziffer der Zahl.
Das Problem mit deiner Methode ist, dass es schon bei relativ kleinen Dualzahlen schluss ist, da die dann ja in rießigen dezimalzahlen abgebildet werden.
Andere Lösung:
Eingabe in einen std::string und dann per schleife (reverse_iterator?) von hinten nach vorne char für char durchgehen, lesen ob '1' oder '0' und bei jeden durchlaf den multiplikator mit 2 multiplizieren:
|
C Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
#include <iostream>
#include <string>
int main()
{
std::string binaer;
int erg = 0;
int mult = 1;
std::cin >> binaer;
for (std::size_t idx = binaer.size()-1; idx >= 0; idx--=
{
if (binaer[idx] == '1')
{
erg += mult;
}
erg *= 2;
}
}
|
Wenn es C ohne ++ sein soll müsste man halt mit CStrings arbeiten, geht aber eigentlich auf die gleiche Weise, man muss nur das '\0' finden ind die position dann in der schleife statt size() verwenden.