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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Leon_AD
103 / 103 / 28
Регистрация: 11.04.2014
Сообщений: 160
#1

Рекурсивный перевод из двоичной системы счисления в десятичную - C++

11.04.2014, 13:42. Просмотров 885. Ответов 3
Метки нет (Все метки)

Вот мой код:
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
31
32
33
34
#include <iostream>
#include <conio.h>
#include <math.h>
 
using namespace std;
int f(int Num)
{
    static int i(-1);
    int t(0);
    if(Num == 0)
        return 0;
    else
    {
        i++;
        cout << i << "===" << Num << "===" << (Num % 10)*exp(i*log((double)2)) << endl;
        t = (Num % 10)*exp(i*log((double)2)) + f(Num / 10);
    }
    return t;
}
 
void main()
{
    
    int Zahl;
    int p;
    cout << "Einschreiben die Zahl: ";
    cin >> Zahl;
    p = f(Zahl);
    cout << "-------- ";
    cout << p;
 
    
    _getch();
}
Вопрос: почему начиная с 1000(в двоичной) число в десятичной получается на единицу меньше, чем должно быть.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.04.2014, 13:42     Рекурсивный перевод из двоичной системы счисления в десятичную
Посмотрите здесь:

Перевод целого (дробного) числа из двоичной системы счисления в десятичную C++
C++ Перевод из двоичной системы счисления в десятичную с плавающей запятой
C++ Написать рекурсивный алгоритм перевода из двоичной системы счисления в десятичную ( из восьмеричной и шестнадцатеричной в десятичную)
C++ Перевод числа из двоичной системы счисления в десятичную
C++ Перевод десятичной дроби из двоичной системы счисления в десятичную
C++ Перевод из двоичной системы счисления в десятичную
C++ Перевод из двоичной системы счисления в десятичную
Перевод из двоичной системы счисления в десятичную C++
C++ Перевести из двоичной системы счисления в десятичную
C++ Рекурсивный перевод числа в десятичную систему счисления
Перевод вещественных чисел из двоичной системы счисления в десятичную C++
Перевод из двоичной системы счисления в десятичную C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
22684 / 14826 / 4256
Регистрация: 22.10.2011
Сообщений: 26,250
Записей в блоге: 4
11.04.2014, 14:08     Рекурсивный перевод из двоичной системы счисления в десятичную #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Встречный вопрос: почему не так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int f(int Num)
{
    static int i(-1);
    int t(0);
    if(Num == 0)
        return 0;
    else
    {
        i++;
        cout << i << "===" << Num << "===" << (Num % 10)*(1<<i) << endl;
        t = (Num % 10)*(1 << i) + f(Num / 10);
    }
    return t;
}
, а с использованием exp/log для вычисления степени двойки?
Leon_AD
103 / 103 / 28
Регистрация: 11.04.2014
Сообщений: 160
11.04.2014, 16:11  [ТС]     Рекурсивный перевод из двоичной системы счисления в десятичную #3
Спасибо, так все работает. Но вопрос остался: почему не работает мой вариант. И как это понять : (1 << i) ?

Добавлено через 18 минут
Это получается единица побитово сдвинется влево на i позиций? Т.е. при i = 0 - 1(2) или 1(10); при i = 1 - 10(2) или 2(10)?
Leon_AD
103 / 103 / 28
Регистрация: 11.04.2014
Сообщений: 160
15.03.2015, 20:48  [ТС]     Рекурсивный перевод из двоичной системы счисления в десятичную #4
Возможно кому-то пригодится. Вот готовый код рекурсивного перевода из двоичной системы в десятичную:
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>
 
using namespace std;
int f(int Num)
{
    static int i(-1);
    int t(0);
    if(Num == 0)
        return 0;
    else
    {
        i++;
        cout << i << "===" << Num << "===" << (Num % 10)*(1<<i) << endl;
        t = (Num % 10)*(1 << i) + f(Num / 10);
    }
    return t;
}
 
void main()
{   
    int num;
    int p;
    cout << "Enter number: ";
    cin >> num;
    p = f(num);
    cout << "-------- ";
    cout << p << endl;
   
    system("pause");
}
Yandex
Объявления
15.03.2015, 20:48     Рекурсивный перевод из двоичной системы счисления в десятичную
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru