С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/18: Рейтинг темы: голосов - 18, средняя оценка - 4.67
 Аватар для Leonman
15 / 15 / 4
Регистрация: 17.06.2012
Сообщений: 274

Перевод десятичного числа в двоичное число

27.09.2013, 20:21. Показов 3536. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго времени суток!
Собственно вот мой код, который должен переводисть число десятичное в число двоичное. Потестил я его, со значениями от 0 до 9 - всё работает, но когда я берусь за число 10, то вместо того, чтобы на выходе у меня было двоичное число 1010, у меня получается число 1110.

Помогите.

Вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <iostream>
#include <vector>
using namespace std;
 
 
int main()
{
    long int number = 10, n = number;
    int in, count = 0;
    vector <int> fl;
    while (number >= 2)
    {
        count++;
        in = number / 2;
        for (int i = 0; i < count; i++)
        {
            fl.push_back(number - (in * 2));
        }
        number = in;
    }
    if (n != 0 && n != 1)
     cout << "1";
    if (n == 0)
     cout << "00";
    if (n == 1)
     cout << "01";
    for(int i = count-1; i >= 0; i--)
        cout << fl[i];
    return 0;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.09.2013, 20:21
Ответы с готовыми решениями:

Перевод десятичного число в двоичное (с подпрограммой)
Написать программу переводящую десятичное число в двоичное. В программе использовать подпрограмму.с++

Перевод десятичного числа в двоичное
Доброго времени суток всем. Программа выполняет перевод десятиричного числа в двоичное, если остаток от деления a%b==0; записывает что b (в...

Перевод десятичного числа в двоичное
вот, что я написал #include&lt;iostream&gt; #include&lt;locale.h&gt; using namespace std; int main(){ setlocale(LC_ALL,&quot;rus&quot;); int digit;...

9
25 / 25 / 11
Регистрация: 02.01.2012
Сообщений: 371
27.09.2013, 20:39
Почему бы не сделать как-то так?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
 
 
int main()
{
    long int number = 1023;
    vector <int> fl;
    while (number >= 2)
    {
        fl.push_back(number%2);
        number /= 2;
    }
    fl.push_back(number);
    reverse(fl.begin(),fl.end()); 
 
    for(int i = 0; i < fl.size(); i++) cout << fl[i];
 
    system("pause");
    return 0;
}
2
 Аватар для Leonman
15 / 15 / 4
Регистрация: 17.06.2012
Сообщений: 274
27.09.2013, 20:44  [ТС]
BuGi, Спасибо за варинат, но я просто ещё не разбирал библиотеку <algorithm> и соответственно не знаком с: reverse(fl.begin(),fl.end());

Я бы хотел узнать в чём моя ошибка в коде.
0
25 / 25 / 11
Регистрация: 02.01.2012
Сообщений: 371
27.09.2013, 20:51
Что код вообще делает? n нигде не меняется, а потом ты само число number получается сравниваешь с нулем и 1

C++
1
2
3
4
5
in = number / 2;
        for (int i = 0; i < count; i++)
        {
            fl.push_back(number - (in * 2));
        }
Если сократить, то получится

number - (in * 2) == number - (number/2 * 2) == number - number


А reverse из algorithm просто переворачивает вектор. Можно сделать просто for(int i = fl.size()-1; i >= 0 ; i--) cout << fl[i];
0
 Аватар для Leonman
15 / 15 / 4
Регистрация: 17.06.2012
Сообщений: 274
27.09.2013, 21:02  [ТС]
BuGi, n нигде не меняется, а потом ты само число number получается сравниваешь с нулем и 1, я это сделал что бы не усложнять код вычислениями, а сразу задать как будет выгледить число 0 и 1 в двоичном коде, мой "аглоритм", работает лишь до тех пор пока number >= 2, а если пользователь захочит получить число 1 или 0 в двоичной коде? вот для этого я и провожу сравнения n, которое равно начальному number, с нулём и 1.

не очень понял, что вы имели ввиду здесь number - (in * 2) == number - (number/2 * 2) == number - number
ну тоесть да, так оно и есть, если сокротить, но к чему это

просто я не хочу пока лезть в эту библиотеку, я хочу сначала понять, как можно сложным образом реализовать данную идую, да и вообще все идеи, а уже после переходить на более простные для компилятора команды.
0
25 / 25 / 2
Регистрация: 25.09.2013
Сообщений: 76
27.09.2013, 21:05
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
 
int main()
{
    long int number = 11;
    int mas[32], i = 31;
    mas[i] = number & 1;
    number = number >> 1;
    i--;
    while (number > 0) {
        mas[i] = number & 1;
        number = number >> 1;
        i--;
    }
    i++;
    for(;i < 32; i++) {
        std::cout << mas[i];
    }
    std::cout << std::endl;
    system("Pause >> null");
    return 0;
}
Или так можно сделать
1
 Аватар для Leonman
15 / 15 / 4
Регистрация: 17.06.2012
Сообщений: 274
27.09.2013, 21:08  [ТС]
govorov, Спасибо, но опять же, у меня цель понять, в чём у меня ошибка, а не просто скопировать код и радоваться тому, что я сам не смог написать его.
0
25 / 25 / 2
Регистрация: 25.09.2013
Сообщений: 76
27.09.2013, 21:20
Условие while (number >= 2) задает не исходное число, а до какого момента делить. Так не пойдет, потому что в этом варианте младщий бит никак не учитывается. Внутри цикла while цикл for по count не нужен, так как каждый бит обрабатывается одним проходом цикла while.
Вот как я исправил твой код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <iostream>
#include <vector>
using namespace std;
 
 
int main()
{
    long int number = 10, n = number;
    int in, count = 0;
    vector <int> fl;
    while (number >= 1)
    {
        count++;
        in = number / 2;
       // for (int i = 0; i < count; i++)
        //{
            fl.push_back(number - (in * 2));
        //}
        number = in;
    }
    /*if (n != 0 && n != 1)
     cout << "1";
    if (n == 0)
     cout << "00";
    if (n == 1)
     cout << "01";*/
    for(int i = count-1; i >= 0; i--)
        cout << fl[i];
    system("Pause >> null");
    return 0;
Работает верно=)
2
25 / 25 / 11
Регистрация: 02.01.2012
Сообщений: 371
27.09.2013, 21:30
Цитата Сообщение от Leonman Посмотреть сообщение
BuGi, n нигде не меняется, а потом ты само число number получается сравниваешь с нулем и 1, я это сделал что бы не усложнять код вычислениями, а сразу задать как будет выгледить число 0 и 1 в двоичном коде, мой "аглоритм", работает лишь до тех пор пока number >= 2, а если пользователь захочит получить число 1 или 0 в двоичной коде? вот для этого я и провожу сравнения n, которое равно начальному number, с нулём и 1.
Ну вот можешь поступить как в моей примере: просто сделай пуш_бек оставшегося бита, а условие if (n != 0 && n != 1) вообще после цикла проверять не надо, к тому же юзай else
0
 Аватар для Leonman
15 / 15 / 4
Регистрация: 17.06.2012
Сообщений: 274
27.09.2013, 21:53  [ТС]
govorov, Здорово, это именно то, что я и хотел увидеть, чёткое и понятное объяснение. Большое спасибо!

Добавлено через 13 минут
BuGi, Ещё один вопрос, почему моё fl.push_back(number - (in * 2)) тоже самое, что ваше fl.push_back(number%2)

Я сначало и сам хотел так написать, но потом подумал, что оператор % ведь берёт остаток от деления. Разве например 15%2 не будет равно 0.5?

Добавлено через 8 минут
Ложная тревога, сам допёр.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.09.2013, 21:53
Помогаю со студенческими работами здесь

Рекурсия: перевод десятичного числа в двоичное
Здравствуйте. Пытался написать пример перевода десятичного числа в двоичный с использованием рекурсии . Но при запуске выводит просто ноль...

Перевод отрицательного целого десятичного числа в двоичное
Помогите решить эту задачу

Перевод отрицательного целого десятичного числа в двоичное
Перевод отрицательного целого десятичного числа в двоичное

Перевод десятичного числа в двоичное, результат в массиве типа int
Здравствуйте! Задача: написать программу, которая переводит введенное десятичное число в двоичное число и цифры результата записывает в...

Перевод десятичного вещественного числа в двоичное путем побитовых операций (Делить на 2 нельзя)
Нужно написать код на С++, который переводит вещественное десятичное число в двоичное с помощью битовых операторов(Сдвиги, &amp;, | и т.п) ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru