Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 8, средняя оценка - 4.88
Leonman
 Аватар для Leonman
15 / 15 / 0
Регистрация: 17.06.2012
Сообщений: 266
27.09.2013, 20:21     Перевод десятичного числа в двоичное число #1
Всем доброго времени суток!
Собственно вот мой код, который должен переводисть число десятичное в число двоичное. Потестил я его, со значениями от 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;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
BuGi
24 / 24 / 1
Регистрация: 02.01.2012
Сообщений: 371
27.09.2013, 20:39     Перевод десятичного числа в двоичное число #2
Почему бы не сделать как-то так?
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;
}
Leonman
 Аватар для Leonman
15 / 15 / 0
Регистрация: 17.06.2012
Сообщений: 266
27.09.2013, 20:44  [ТС]     Перевод десятичного числа в двоичное число #3
BuGi, Спасибо за варинат, но я просто ещё не разбирал библиотеку <algorithm> и соответственно не знаком с: reverse(fl.begin(),fl.end());

Я бы хотел узнать в чём моя ошибка в коде.
BuGi
24 / 24 / 1
Регистрация: 02.01.2012
Сообщений: 371
27.09.2013, 20:51     Перевод десятичного числа в двоичное число #4
Что код вообще делает? 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];
Leonman
 Аватар для Leonman
15 / 15 / 0
Регистрация: 17.06.2012
Сообщений: 266
27.09.2013, 21:02  [ТС]     Перевод десятичного числа в двоичное число #5
BuGi, n нигде не меняется, а потом ты само число number получается сравниваешь с нулем и 1, я это сделал что бы не усложнять код вычислениями, а сразу задать как будет выгледить число 0 и 1 в двоичном коде, мой "аглоритм", работает лишь до тех пор пока number >= 2, а если пользователь захочит получить число 1 или 0 в двоичной коде? вот для этого я и провожу сравнения n, которое равно начальному number, с нулём и 1.

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

просто я не хочу пока лезть в эту библиотеку, я хочу сначала понять, как можно сложным образом реализовать данную идую, да и вообще все идеи, а уже после переходить на более простные для компилятора команды.
govorov
24 / 24 / 3
Регистрация: 25.09.2013
Сообщений: 76
27.09.2013, 21:05     Перевод десятичного числа в двоичное число #6
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;
}
Или так можно сделать
Leonman
 Аватар для Leonman
15 / 15 / 0
Регистрация: 17.06.2012
Сообщений: 266
27.09.2013, 21:08  [ТС]     Перевод десятичного числа в двоичное число #7
govorov, Спасибо, но опять же, у меня цель понять, в чём у меня ошибка, а не просто скопировать код и радоваться тому, что я сам не смог написать его.
govorov
24 / 24 / 3
Регистрация: 25.09.2013
Сообщений: 76
27.09.2013, 21:20     Перевод десятичного числа в двоичное число #8
Условие 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;
Работает верно=)
BuGi
24 / 24 / 1
Регистрация: 02.01.2012
Сообщений: 371
27.09.2013, 21:30     Перевод десятичного числа в двоичное число #9
Цитата Сообщение от Leonman Посмотреть сообщение
BuGi, n нигде не меняется, а потом ты само число number получается сравниваешь с нулем и 1, я это сделал что бы не усложнять код вычислениями, а сразу задать как будет выгледить число 0 и 1 в двоичном коде, мой "аглоритм", работает лишь до тех пор пока number >= 2, а если пользователь захочит получить число 1 или 0 в двоичной коде? вот для этого я и провожу сравнения n, которое равно начальному number, с нулём и 1.
Ну вот можешь поступить как в моей примере: просто сделай пуш_бек оставшегося бита, а условие if (n != 0 && n != 1) вообще после цикла проверять не надо, к тому же юзай else
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.09.2013, 21:53     Перевод десятичного числа в двоичное число
Еще ссылки по теме:

C++ Перевод отрицательного целого десятичного числа в двоичное
Перевод десятичного числа в двоичное C++
Перевод десятичного числа в двоичное, результат в массиве типа int C++

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

Или воспользуйтесь поиском по форуму:
Leonman
 Аватар для Leonman
15 / 15 / 0
Регистрация: 17.06.2012
Сообщений: 266
27.09.2013, 21:53  [ТС]     Перевод десятичного числа в двоичное число #10
govorov, Здорово, это именно то, что я и хотел увидеть, чёткое и понятное объяснение. Большое спасибо!

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

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

Добавлено через 8 минут
Ложная тревога, сам допёр.
Yandex
Объявления
27.09.2013, 21:53     Перевод десятичного числа в двоичное число
Ответ Создать тему
Опции темы

Текущее время: 07:15. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru