Консультация № 74655
07.02.2007, 21:41
0.00 руб.
0 3 3
Уважаемые эксперты помогите в написании функции которая получает в качестве параметров целое число и систему счисления в которую его нужно перевести.Например 14 в 5-ю -24, 28 в 16-ю 1С. Систем счисления 32. При прямом переводе число получается наоборот, есть идея использовать динамический массив, но может есть более простой путь.Программирую под консолью.

Обсуждение

Неизвестный
08.02.2007, 06:37
общий
это ответ
Здравствуйте, Krush!
Вот, например, перевод систем исчисления при помощи строк. Код в приложении. Функция

string change_calc_system(const string& number, int base_sys, int dest_sys, const string& digits_set);

принимает число в виде строки const string& number в системе исчисления int base_sys и переводит его в систему int dest_sys. При переводе используется набор символов const string& digits_set.

Приложение:
#include <string>#include <iostream>using namespace std;int _pow(int x, int y) { int result = 1; while(y--) result *= x; return result;}string change_calc_system(const string& number, int base_sys, int dest_sys, const string& digits_set) { int base_pow = (int)number.length(); int dest_pow = 0; string result; int decimal = 0; int index; for(int i=0; i<base_pow; i++) decimal += (int)(digits_set.find_first_of(number[i]))*_pow(base_sys, base_pow-i-1); int temp = decimal; while(decimal >= dest_sys) { dest_pow++; decimal /= dest_sys; } decimal = temp; for(i=0; i<dest_pow; i++) { index = decimal/_pow(dest_sys, dest_pow-i); result.push_back(digits_set[index]); decimal %= _pow(dest_sys, dest_pow-i); } if(decimal != 0) result.push_back(digits_set[decimal]); return result;} int main(int argc, char* argv[]) { string digits_set("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"); cout << change_calc_system(string("6DH"), 32, 11, digits_set) << endl; cout << change_calc_system(string("FFE34"), 16, 10, digits_set) << endl; return 0;}
Неизвестный
08.02.2007, 12:04
общий
это ответ
Здравствуйте, Krush!

#include<iostream>
#include<string>

using std::string;

const char*
dec2any(unsigned long n, short base)
{
string rep;
if ((base < 2) || (base > 32)) return 0;
while (n > 0) {
char m = (char)(n % base);
m += (m>9) ? 55 : 48;
rep.insert(rep.begin(),1,m);
n = n / base;
}
return rep.c_str();
}

int main()
{
unsigned long n;
short base;
std::cout << "Input n and base: ";
std::cin >> n >> base;
std::cout << dec2any(n,base) << std::endl;
return 0;
}

Неизвестный
09.02.2007, 21:29
общий
это ответ
Здравствуйте, Krush!

#include <conio.h>

bool dec_to_base(unsigned int dec,unsigned char base)
{
if (base<2 || base >32) return false;
char digits[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";

if (dec/base) dec_to_base(dec/base,base);
putch(digits[dec%base]);

return true;
}

void main()
{
dec_to_base(254,16);
}
Форма ответа