BlackMark
Lt. Commander
- Registriert
- Juni 2007
- Beiträge
- 1.346
@nerdalicious Die Aufgabe verlangt, dass nur
@Laschadura Wieso sollte die Aufgabenstellung fehlerhaft sein? Es wurden ja sogar schon mehrere Lösungen präsentiert, die nur
Die Lösung mit Rekursion von @Panzerfahrer funktioniert und erfüllt die Aufgabenstellung und die Lösung von @mkossmann ebenfalls. Auch wenn beide Implementierungen nicht komplett korrekt sind, die Ideen dahinter stimmen.
Hier die beiden Lösungen von @Panzerfahrer und @mkossmann komplett ausimplementiert/korrigiert und auch der Edge-case von 0 behandelt:
Gruß
BlackMark
<iostream>
verwendet werden soll und verbietet explizit Arrays. Die Lösung mit einem String geht also nicht, ein String in diesem Kontext ist auch ein Array.@Laschadura Wieso sollte die Aufgabenstellung fehlerhaft sein? Es wurden ja sogar schon mehrere Lösungen präsentiert, die nur
<iostream>
verwenden und nichts in einem Array/String zwischenspeichern.Die Lösung mit Rekursion von @Panzerfahrer funktioniert und erfüllt die Aufgabenstellung und die Lösung von @mkossmann ebenfalls. Auch wenn beide Implementierungen nicht komplett korrekt sind, die Ideen dahinter stimmen.
Hier die beiden Lösungen von @Panzerfahrer und @mkossmann komplett ausimplementiert/korrigiert und auch der Edge-case von 0 behandelt:
C++:
#include <iostream>
void estimateLengthConversion(unsigned int number) {
if (number == 0) {
std::cout << "0\n";
return;
}
bool leadingZeros = true;
for (int i = sizeof(unsigned int) * 8 - 1; i >= 0; --i) {
const unsigned int mask = 1 << static_cast<unsigned int>(i);
if (number & mask) {
leadingZeros = false;
std::cout << '1';
} else if (!leadingZeros) {
std::cout << '0';
}
}
std::cout << '\n';
}
void recursiveConversionHelper(unsigned int number) {
if (number > 0) {
recursiveConversionHelper(number >> 1);
std::cout << (number % 2);
}
}
void recursiveConversion(unsigned int number) {
if (number == 0) {
std::cout << "0\n";
} else {
recursiveConversionHelper(number);
std::cout << '\n';
}
}
int main() {
unsigned int input;
std::cin >> input;
estimateLengthConversion(input);
recursiveConversion(input);
return 0;
}
Gruß
BlackMark