Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
73 / 73 / 12
Регистрация: 22.01.2013
Сообщений: 231

Перевод из одной системы счисления в другую

05.03.2013, 14:41. Показов 2589. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Проблема с переводом из двоичной системы в десятичную. Допустим у нас есть такое число 11101101 это 237 моя программа хорошо переводит, но если введем 11101110 это 238 моя программа выдает 239. Какую ошибку я допустил?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void binary_to_ten(int binary)
{
    int tmp = binary, sum = 0;
    int number = number_digit(tmp);
    vector<int> binary_code;
    while(tmp != 0)
    {
        binary_code.push_back(tmp%10);
        tmp /= 10;
    }
    reverse(binary_code.begin(),binary_code.end());
    for(int i = 0; i < binary_code.size(); ++i){
        binary_code[i] = my::pow(binary_code[i]*2,number-i-1);
        sum += binary_code[i];
    }
    cout<<sum;
}
Вот весь код:
Кликните здесь для просмотра всего текста
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#include <iostream>
#include <vector>
#include <algorithm>
#include <math.h>
 
using namespace std;
 
void ten_to_binary(int);
void binary_to_ten(int);
int number_digit(int);
namespace my{
    int pow(int n,int x)
    {
        if(x == 0) return 1;
        int tmp = n;
        for(int i = 1; i < x; ++i)
            tmp *= n;
        //cout<<tmp<<endl;
        return tmp;
    }
}
 
int main()
{
    cout<<"Enter number: ";
    int digit;
    cin>>digit;
    //ten_to_binary(digit);
    binary_to_ten(digit);
    
    system("pause>0");
    return 0;
}
 
void binary_to_ten(int binary)
{
    int tmp = binary, sum = 0;
    int number = number_digit(tmp);
    vector<int> binary_code;
    while(tmp != 0)
    {
        binary_code.push_back(tmp%10);
        tmp /= 10;
    }
    reverse(binary_code.begin(),binary_code.end());
    for(int i = 0; i < binary_code.size(); ++i){
        binary_code[i] = my::pow(binary_code[i]*2,number-i-1);
        sum += binary_code[i];
    }
    cout<<sum;
}
 
int number_digit(int num)
{
    int tmp = 0;
    while(num != 0)
    {
        num /= 10;
        tmp ++;
    }
    return (tmp);
}
 
void ten_to_binary(int ten)
{
    int tmp = ten,temp;
    vector<int> binary_code;
    while(tmp > 0)
    {
        temp = tmp;
        tmp = tmp / 2;
        binary_code.push_back(temp - (tmp * 2));
 
    }
    reverse(binary_code.begin(),binary_code.end());
    for(int i = 0; i < binary_code.size(); ++i)
        cout<<binary_code[i];
 
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.03.2013, 14:41
Ответы с готовыми решениями:

Перевод из одной системы счисления в другую
Посмотрите, пожалуйста, кому не сложно код в с++. При компиляции выдает ошибку invalid function declaration Текст задачи: Десятичное...

Перевод из одной системы счисления в другую от 2 до 36
Помогите пожалуйсто, сколько сижу ничего стоющего не приходит в голову! Дано целое неотрицательное число в I-ричной системе счисления....

Перевод из одной системы счисления в другую
Суть задачи такова: Написать программу , которая переводит число из 2-й системы счистления в 12-ю через 10-ю. Заранее спасибо!)Язык С++ ...

3
Антикодер
Эксперт функциональных языков программирования
1888 / 870 / 48
Регистрация: 15.09.2012
Сообщений: 3,088
05.03.2013, 14:51
если вам потребуется такая функция, значит что-то в программе сделано не так. надо работать с целыми числами и в зависимости от задач, выводить их в разном представлении.

Не по теме:


По моему главная проблема в ваших программах отсутствие принципа KISS, вы пишите так, что сами не можете разобраться(при этом ваш код лучше чем у большинства, которые тут встречаются). Даже не знаю, что вам посоветовать почитать. Могу только посоветовать искать более легкие алгоритмы.

1
73 / 73 / 12
Регистрация: 22.01.2013
Сообщений: 231
05.03.2013, 14:58  [ТС]
Кажется ошибка в функции pow, когда n == 0 то нужно вернуть 0, а у меня возвращало 1
C++
1
2
3
4
5
6
7
8
9
int pow(int n,int x)
    {
        if(n == 0) return 0;
        if(x == 0) return 1;
        int tmp = n;
        for(int i = 1; i < x; ++i)
            tmp *= n;
        return tmp;
    }
Добавлено через 5 минут
А почему я здесь не могу использовать стандартную функцию возведения в степень?
0
Антикодер
Эксперт функциональных языков программирования
1888 / 870 / 48
Регистрация: 15.09.2012
Сообщений: 3,088
06.03.2013, 09:25
если пользователь вводит в двоичной системе счисления он вводит строку
string
после того как получили строку, надо посимвольно её проанализировать, если символ 1 то пишем в int примерно так
C++
1
2
3
int iNum = 0;
...
iNum = iNum |( 1<< n);
где n - позиция символа в строке от 0 начиная справа

а если 0 то тупо пропускаем итерацию

таким образом мы можем заполнить int до предела

про битовые операции есть хорошая статья в вики

вот тут кстати самое правильное решение
http://www.cplusplus.com/forum/beginner/89017/
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.03.2013, 09:25
Помогаю со студенческими работами здесь

Перевод из одной системы счисления в другую
Приветствую, дали задание написать программу которая при вводе числа в 34-ричной системе счисления переводит это число в 14-ричную, голову...

Перевод из одной системы счисления в другую
Помогите разобраться с переводом из любой системы счисления в любую. Хотел составить программу типа: Основание системы (вход): 15 ...

Перевод с одной системы счисления в другую
Приветствую вас, товарищи программисты. Помогите пожалуйста. Не могу решить, маленькую проблемку. Как сделать так, что-бы при вводе...

Перевод из одной системы счисления в другую.
Помогите пожалуйста написать программу для перевода чисел из одной системы в другую. Используемые системы счисления: от двоичной до...

Перевод из одной системы счисления в другую.
Мне задали сделать калькулятор для программиста на языке С. В нем требуется выполнение операций только целые числа, 4 арифметических...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение Это мой обзор планшета X220 с точки зрения школьника. Недавно я решила попытаться уменьшить свой. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru