Как то нужно в этом коде использовать сложный цикл
#include <iostream>
#include <string>
#include <cmath>
using namespace std;
int main()
{
int n;
string s = "";
cout << "Enter a number : "; cin >> n;
cout << endl;
while (n >= 1)
{
s += to_string(n % 2);
n = (int)(n / 2);
}
cout << "Bin : " << s << endl;
int g = size(s) - 1;
int sum = 0;
for (int i = 0; i <= size(s); i++, g--)
{
if (s[i] == '1')
{
sum += pow(2, g);
}
else
{
continue;
}
}
cout << "Dec : " << sum << endl << endl;
}
Думаю, нужно что-то сделать с нижним циклом, но можно и другой. Помогите, пожалуйста
Задание : Из числа, которое вводит пользователь получить бинарный код, перевернуть его, получить из перевернутого десятичное число.
Ответы (2 шт):
Автор решения: Harry
→ Ссылка
Вы просто сразу получаете обращенный бинарный код.
Попробуйте так:
#include <iostream>
#include <string>
#include <cmath>
using namespace std;
int main()
{
int n;
string s = "";
cout << "Enter a number : ";
cin >> n;
if (n == 0) s = "0"; else
for(;n;)
{
char c = "01"[n%2];
n = n/2;
if (n || c == '1') s = c + s;
}
cout << "Bin : " << s << endl;
reverse(s.begin(),s.end());
cout << "Bin (rev): " << s << endl;
n = 0;
for (int i = 0; i < s.size(); ++i)
{
n = n*2 + s[i] - '0';
}
cout << "Dec : " << n << endl << endl;
}
Автор решения: AR Hovsepyan
→ Ссылка
Это можно делать по разному. Например, если машина с порядком хранения от младшего бита к старшему:
int n;
cout << "Enter a number : ";
cin >> n;
std::string binary;
while (n) {
binary.insert(binary.begin(), (n & 1) + '0');
n >>= 1;
}
cout << "\nBin : " << binary;
int res = 0;
for (size_t i = 0; i < binary.size(); ++i) {
if(binary[i] == '1')
res |= (1 << i); //установить i _ тый бит
}
//результат с перевернутым бинарным кодом
cout << "\nDec : " << res;