Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
13 / 13 / 13
Регистрация: 14.02.2013
Сообщений: 769
1

Функция перевода из 10-ричной СС в 80-ричную СС

02.09.2014, 11:37. Просмотров 884. Ответов 5
Метки нет (Все метки)

Здравствуйте, как реализовать функцию перевода из 10-ричной СС, в 80-ричную СС ?
подход перевода должен быть такой же как и к 16-чилесьной СС.
Она должна принимать тип int и возвращать тип int
80 символов СС:
0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwx yz!@#$%^&*()[]-=_+,.
нужно функцию перевода туда и обратно, как ее написать ?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.09.2014, 11:37
Ответы с готовыми решениями:

Составить программу перевода чисел из 11-ричной системы счисления в 6-ричную
Составить программу перевода чисел из 11-ричной системы счисления в 6-ричную. Именно такие системы.

Функция перевода из 16-ричной системы счисления в десятичную
Есть ли в си++ такая фун-я?

Как перевести число из 5-ричной в 9-ричную?
Привет всем. Как перевести число из 5-ричной в 9-ричную? Число 2345 -> ? 9

Перевод из n-ричной системы счисления, в k-ричную
Сабж. Само число не превышает 2^31, писал так: #include <iostream> #include <string> #include...

5
Эксперт С++
4966 / 3072 / 456
Регистрация: 10.11.2010
Сообщений: 11,159
Записей в блоге: 10
02.09.2014, 11:51 2
int to80( int i ) { return i; }
Возвращает число в 80 СС.
0
13 / 13 / 13
Регистрация: 14.02.2013
Сообщений: 769
02.09.2014, 11:53  [ТС] 3
castaway, смешно...
Перевод в 80 СС
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
const int _ABC = 80;
void PrintNumInHex(int Num)
{
    if (Num < 0)
    {
        Num = -Num;
        cout << '-';
    }
    const int MaxDigs = 8;
    char Digs[MaxDigs];
    int NumDigs = 0;
    do
    {
        assert(NumDigs < MaxDigs);
        Digs[NumDigs++] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!@#$%^&*()[]-=_+,./"[Num % _ABC];
        cout << Digs << endl;
        Num /= _ABC;
    } while (Num != 0);
    for (int i = NumDigs - 1; i >= 0; i--)
    {
        cout << Digs[i];
    }
    cout << ' ';
}
как сделать теперь назад в 10 СС ?
0
Эксперт С++
4966 / 3072 / 456
Регистрация: 10.11.2010
Сообщений: 11,159
Записей в блоге: 10
02.09.2014, 11:55 4
Ты написал что она должна возвращать тип int. Где она возвращает тип int?
0
13 / 13 / 13
Регистрация: 14.02.2013
Сообщений: 769
02.09.2014, 12:01  [ТС] 5
блин точно. Но работает)
Как сделать чтоб теперь из 80-ричной в 10-ричную ?
важно чтоб функция принимала аргумент типа int - то-есть значение которое нужно перевести.
Функция может бить и void, но главное что работала
0
669 / 285 / 99
Регистрация: 04.07.2014
Сообщений: 801
02.09.2014, 12:31 6
Для начала, тип int не относится к системе исчисления. В твоём случае, 80CC - это только текстовое представление числа. Если ты пишешь под C++, то используй std::string. Для перевода из строкового представления числа в десятеричной системе в int, есть стандартные функции. Таким образом для перевода из int в 80CC нужна функция вида:
C++
1
std::string intToNs80(int n); // NS80 - Base-80 Numeral system, например
Внутри этой функции воспользуйся вместо std::cout классом std::stringstream:
C++
1
2
3
4
5
6
7
std::stringstream ss;
...
ss << '-';
...
ss << "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!@#$%^&*()[]-=_+,./"[Num % _ABC];
...
return ss.str();
А в main ты можешь писать более красиво:
C++
1
std::cout << intToNs80(-123456);
Для обратного преобразования
C++
1
 int Ns80ToInt(std::string num);
будешь перебирать посимвольно строку.
Для каждого символа, тебе надо будет сопоставить число.
Учитывая, что коды символов "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvw xyz!@#$%^&*()[]-=_+,./" расположены не по порядку, надо будет использовать условные операторы, но для упрощения, можно разбить на интервалы, например:
C++
1
2
3
4
5
6
7
8
9
10
// char dig_char - цифра в 80 СС, как символ
// char dig_int - цифра в 80 СС, как число
// int result - результат
if ((dig_char>='0')&&(dig_char<='9')) {
  dig_int = dig_char-'0'; // Разница кодов
} else if ((dig_char>='A')&&(dig_char<='B')) {
  dig_int = dig_char-'A'+10; // Разница кодов + 10
}
...
result = result*_ABC+(int)dig_int;
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.09.2014, 12:31

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Перевести число из 4-ричной системы счисления в 18-ричную и наоборот
Перевести число из 4-ричной системы счисления в 18-ричную и наоборот

Программа перевода из 6-ричной системы счисления в 12-ричную
Помогите сделать РГР! Надо чтобы выводилась сначала базовая система,потом десятичная...

Перевод из 10-ричной в 8-ричную!
Доброго времени суток! Помогите решить задачку! Напишите программу, которая проверяет вторую...

Из 13-ричной системы перевести в 8-ричную
Доброго времени суток форумчане. Есть вопрос:Помогите пожалуйста с система счиления, нужно из...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

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