Cоставить функцию перевода из 10-ой системы счисления в 12-ую
Нужно перевести из 7ой в 10ую, а потом в 12ую. На последнем шаге я и споткнулся Некоторые функции нужно было писать самому (strlen, atoi, itoa)
#include <iostream>
#include <string>
#include <math.h>
using namespace std;
int size(string str) //strlen
{
int i = 0;
while (str[i] != '\0')
{
i++;
}
return i;
}
int atoi(char s) //atoi
{
return s - '0';
}
char itoa(int a) //itoa
{
return a + '0';
}
int translater(string str, int x) //перевод из 7ой в 10ую
{
for (int i = 0; i < size(str); i++)
{
x += atoi(str[i]) * pow(7, size(str) - 1 - i);
}
return x;
}
int trans2(string str, int x)
{
//Здесь нужна функция перевода из 10ой в 12ую
}
int main()
{
string str1;
int x=0;
cout << "Enter your number in sevenfold number system:\n";
cin >> str1;
cout << "Your number in sevenfold number system:\n" << str1 << endl;
cout << "Your number in decimal system:\n" << translater(str1, x) << endl;
cout << "Your number in duodecimal system:\n" << trans2(str1, x);
return 0;
}
Ответы (1 шт):
Автор решения: Павел Ериков
→ Ссылка
Я думаю, что ваша функцию translater должна или через ссылку вернуть число в 10-ой системе счисления, или результат return куда нибудь сохранить. Я добавил ссылку для параметра x.
Перевод из 10 в какую либо другую систему счисления, происходит следующим образом:
- Получаете остаток от деления исходного числа на 12 (в вашем случае)
- Если остаток
>= 10, то начиная с 10 вы вставляете буквы латинского алфавита по порядку. То есть10 = a,11 = bи т.д. (В вашем случае остаток может получиться10или11. Далее символ вставляете или в начало результирующей строки или в конец (Но нужно будет её инвертировать под конец) - Далее делите число на 12 (в вашем случае)
- Повторяете операции пока число > 0
Попробуйте сначала сами реализовать алгоритм описанный выше :)
А так вот пример функции:
string trans2(int x)
{
string result;
do {
char s = '0' + x % 12;
if (s == 58) s = 'a';
if (s == 59) s = 'b';
result = s + result;
x /= 12;
} while (x > 0);
return result;
}