@Shadwscream

При попытке перевернуть число выдает левые значения. Откуда?

Здравствуйте! Имеется код в котором вычисляю двоичное число. При попытке вывести его в правильном порядке, где-то после 5-й цифры появляется "44575" "52535" "52535" вместо единиц. Подскажите ошибку?
#include <iostream>

int main()
{
    uint16_t x, b;
    uint16_t count = 0;
    uint16_t y = 0;

    std::cin >> x;
    std::cin >> numeric_system_base;

    while ( x != 0 )
    {
        b = x % numeric_system_base;
        y = y * 10 + b;
   
        if ( 1 == x % numeric_system_base )
            count++;

        x = x / numeric_system_base;
    }
 return 0;
}
  • Вопрос задан
  • 71 просмотр
Решения вопроса 1
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
Число y переполняется. Вы записываете двоичную запись десятичными цифрами. в uint16_t помещаются число до 65535. Соответственно, если вы постараетесь 100000 туда записать, оно переполнится. Т.е. ваша программа не работает при x>=32.

Вместо запихивания довичной записи в десятичное число вы должны биты записывать в строку std::string. Потом ее перед выводом развернуть.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы