Как то нужно в этом коде использовать сложный цикл

#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;
→ Ссылка