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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 34, средняя оценка - 4.79
soul_of_water
 Аватар для soul_of_water
2 / 2 / 0
Регистрация: 10.05.2010
Сообщений: 63
29.09.2010, 21:35     Перевод из одной системы счисления в другую #1
Осуществить перевод введенного с клавиатуры числа в двоичной, шестнадцатерич-ной, восьмеричной или десятичной системах счисления в другие системы счисления. Система счисления введенного с клавиатуры числа определяется литерой в конце числа (B – двоичная, H – шестнадцатеричная, O – восьмеричная, D – десятичная).

может у кого то есть какие то наброски?например ,перевод из любой системы счисления в другую....мне бы принцип понять
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Sanyco-007
 Аватар для Sanyco-007
41 / 41 / 6
Регистрация: 10.02.2010
Сообщений: 179
29.09.2010, 22:55     Перевод из одной системы счисления в другую #2
Перевод из одной системы счисления в другую можно выполнить по следующему правилу:
1) Если основание исходной системы меньше основания результирующей системы счисления, то берем самый старший розряд числа, умножаем его на основание и прибавляем следующий розряд, который, результат умножаем на основание исходной системы и т. д. Пример перевода 1111 из двоичной в десятиную:
((1*2+1)*2+1)*2+1 = 15.
2) Если основание исходной системы больше основания результирующей, то необходимо все розряды исходного числа и исходную систему перевести в результирующую систему и далее как в п.1. Например перевод 15 обратно в 1111:
1 -> 1
15 - > 101
10 -> 1010
1*101+1010 = 1111;
Перевод с большей в меньшую можна также осуществить с помощью деления числа на основание результирующей системы:
15/2 = 7 (1)
7/2 = 3 (1)
3/2 = 1 (1)
1/2 = 0 (1)
- в дужках - остача от деления. Нужное число записываем как остачи задом наперёд.
Переведем число 12:
12/2 = 6(0)
6/2 = 3 (0)
3/2 = 1 (1)
1/2 = 0 (1)
результат -> 1100
gooseim
Эксперт C++
500 / 404 / 35
Регистрация: 23.09.2010
Сообщений: 1,139
29.09.2010, 23:45     Перевод из одной системы счисления в другую #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
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
80
81
82
83
84
#include <string>
#include <vector>
#include <iostream>
#include <cmath>
 
using namespace std;
 
size_t getnum(const string& in, size_t base)
{
    string numbers="0123456789ABCDEF";
    size_t n=0;
    for(size_t i=0;i<in.length();i++)
    {
        size_t j=in.length()-1-i;
        size_t m=numbers.find(in[j]);
        n+=m*(size_t)pow((double)base, (double)i);
    }
    return n;
}
 
string convert(size_t in, size_t base)
{
    string numbers="0123456789ABCDEF";
    string out;
    while(in)
    {
        size_t n=in%base;       
        out.insert(0, 1, numbers[n]);
        in/=base;
    }
    return out;
}
 
string convert(const string& val, size_t from_base, size_t to_base)
{
    return convert(getnum(val, from_base), to_base);
}
 
string my_convert(string val, size_t to_base)
{   
    char base='X';  
    char type=val[val.length()-1];
    val.resize(val.length()-1);
    
    switch(to_base)
    {
    case 2:
        base='B';
        break;
    case 16:
        base='H';
        break;
    case 8:
        base='O';
        break;
    case 10:
        base='D';
        break;
    }
 
    switch(type)
    {
    case 'B':
        return convert(val, 2, to_base)+base;
        break;
    case 'H':
        return convert(val, 16, to_base)+base;
        break;
    case 'O':
        return convert(val, 8, to_base)+base;
        break;
    case 'D':
        return convert(val, 10, to_base)+base;
        break;
    }
    return "";
}
 
int main()
{
    string n="10D";
    cout<<my_convert(n, 2)<<endl;
    system("pause");
}
Добавлено через 27 секунд
Можно сократить код, но пока лень.
Mr.X
Эксперт С++
 Аватар для Mr.X
2802 / 1578 / 247
Регистрация: 03.05.2010
Сообщений: 3,666
30.09.2010, 02:26     Перевод из одной системы счисления в другую #4
Автор, я вам сейчас один умный вещь скажу: наберите в поиске данного форума слова "системы счисления".
soul_of_water
 Аватар для soul_of_water
2 / 2 / 0
Регистрация: 10.05.2010
Сообщений: 63
30.09.2010, 12:33  [ТС]     Перевод из одной системы счисления в другую #5
Всем большое спасибо, сделала через форму....
Yandex
Объявления
30.09.2010, 12:33     Перевод из одной системы счисления в другую
Ответ Создать тему
Опции темы

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