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

Функция для конвертирования систем счисления. Не выходит :( - C++

Восстановить пароль Регистрация
 
Аццкий Прогер
21 / 10 / 4
Регистрация: 07.01.2013
Сообщений: 220
31.03.2013, 16:21     Функция для конвертирования систем счисления. Не выходит :( #1
Помогите решить задачу:
Написать функцию, которая получает в качестве аргументов целое положительное число и систему счисления, в которую это число должно переводится (системы счисления от 2 до 36). Например, при переводе числа 27 в систему счисления 16 должно получиться 1B; 13 в 5-ю - 23; 35 в 18-ю - 1H.

Если система счисления до 10, то все получается, если уже выше...
Я понимаю, что то делаю не правильно. Вот подскажите, в каком направлении двигаться ))

Мои потуги:

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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <time.h>
#include <stdlib.h>
#include <math.h>
using namespace std; 
 
 
int Convert (int a, int b);
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale (LC_ALL, "russian");
    int x;
    x=Convert (15, 16);
    cout<<x<<endl;
    _getch();
    return 0;
}
int Convert (int a, int b)
{
    setlocale (LC_ALL, "russian");
    int o=0, k=1;
    if (b<10)
    {
        do
        {
            o+=a%b*k;
            a/=b;
            k*=10;
        }
        while (a);
    }
    if (b>10)
    {
        do
        {
            o+=a%b*k;
            a/=b;
            k*=10;
        }
        while (a);
        switch (b=10)
        {
        case 10: 'A';
            break;
        default:
            cout<<"Не верный ввод!"<<endl;
        }
        switch (b=11)
        {
        case 10: 'A';
        case 11: 'B';
            break;
        default:
            cout<<"Не верный ввод!"<<endl;
        }
        switch (b=13)
        {
        case 10: 'A';
        case 11: 'B';
        case 12: 'C';
            break;
        default:
            cout<<"Не верный ввод!"<<endl;
        }
        switch (b=14)
        {
        case 10: 'A';
        case 11: 'B';
        case 12: 'C';
        case 13: 'D';
            break;
        default:
            cout<<"Не верный ввод!"<<endl;
        }
        switch (b=15)
        {
        case 10: 'A';
        case 11: 'B';
        case 12: 'C';
        case 13: 'D';
        case 14: 'E';
            break;
        default:
            cout<<"Не верный ввод!"<<endl;
        }
        switch (b=16)
        {
        case 10: 'A';
        case 11: 'B';
        case 12: 'C';
        case 13: 'D';
        case 14: 'E';
        case 15: 'F';
            break;
        default:
            cout<<"Не верный ввод!"<<endl;
        }
    }
    return o;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.03.2013, 16:21     Функция для конвертирования систем счисления. Не выходит :(
Посмотрите здесь:

Перевод систем счисления. C++
функции для перевода из разных систем счисления C++
C++ Программа перевода систем счисления
C++ перевод чисел из систем счисления
C++ перевод систем счисления
умножение чисел систем счисления C++
Задача: преобразование систем счисления C++
C++ направьте на путь истинный) перевод систем счисления

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
IrineK
Заблокирован
31.03.2013, 16: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
24
25
26
27
28
29
30
31
32
33
34
35
#include <iostream>
using namespace std;
 
char* itob(int num, char* buffer, int base)
{
    if (!num) 
       return '\0';
    char res;
    int i, LEN = strlen(buffer);
    if(num%base > 9) res = (char)(num%base-10)+'A';
        else res = (char)(num%base)+'0';
    
    for(i=LEN;i>-1;i--)
        buffer[i+1]=buffer[i];
    buffer[0]=res;
 
    itob(num/base, buffer, base);
    return buffer;
}
 
 
int main()
{       
    int n,b;
    while(1)
    {   cout<<"n = ";
        cin>>n;
        cout<<"b = ";
        cin>>b;
        char buf[80]="";
        itob(n,buf,b);
        cout<<buf<<"\n";
    }
    return 0;
}
Аццкий Прогер
21 / 10 / 4
Регистрация: 07.01.2013
Сообщений: 220
31.03.2013, 18:37  [ТС]     Функция для конвертирования систем счисления. Не выходит :( #3
Хороший вариант, короткий и функциональный.
Обязательно разберусь в нем. Но есть одно но, мою задачу так решать нельзя, мы еще не проходили строки
Отсюда вопрос, как переделать мой вариант, не используя строки?

И аргументами функции, могут быть только два числа: 1. переводимое число; 2. система счисления.
Yandex
Объявления
31.03.2013, 18:37     Функция для конвертирования систем счисления. Не выходит :(
Ответ Создать тему
Опции темы

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