2015-11-02 4 views
0

У меня проблема. Я хочу преобразовать целое число (ex 64) в определенную базу (ex 4). Число будет выглядеть как 100 (я думаю). Мне нужно получить номер, представленный ранее (100). Если я использую алгоритм, который я думал о том, что я получу 001, который будет преобразован в 1. Как я могу преобразовать базовое число 10 в представление базы 4, начиная с первой цифры, которая не равна 0. Извините за мое плохое объяснение, Надеюсь, кто-то поймет.Преобразование базы 10 в определенное основание

int x=64; 
int t=x; // temp variable 
int pp=0; 
int base=4; 
while(t!=0) 
{ 
     pp = pp * 10 + t%base; 
     t/=base; 
} 
+0

http://en.cppreference.com/w/cpp/io/manip/setbase –

+0

Я предполагаю, что вы делаете это как упражнение, так как существуют библиотеки для базы преобразование. База - это свойство отображения числа, поэтому я не буду хранить его в 'int'. Вы можете запустить цикл, помещая символы в массив 'char', а затем отобразить массив' char' в обратном порядке. – lurker

+0

То, что обманутый ответ на самом деле не ясно дал понять, заключается в том, что то, что вы делаете, на самом деле не имеет смысла. Числа фактически беспочвенны - если у меня есть 25 из того, что у меня всегда одинаковое число, независимо от того, что такое база. Infact ваш компьютер, вероятно, сохраняет все номера в качестве базы 2 внутри, но вы этого не видите. В чем разница: _displaying_ этот номер для пользователя (или сохранение его в файле и т. Д.). В этом случае, когда вы конвертируете его в строку, вам нужно указать базу для преобразования. Наличие переменной типа «int» в определенной базе имеет мало смысла. –

ответ

0

Вам нужно добавить данные в передней части значения:

int x = 64; 
int t = x; // temp variable 

int pp = 0; 
int base = 4; 

int pos = 1; 

while (t != 0) 
{ 
    pp += (t % base) * pos; 
    t /= base; 
    pos *= 10; 
} 

Я надеюсь, что вы используете только это для игры вокруг, поскольку есть много ловушек, вы могли бы упасть в (например, если base составляет менее 0 или более 10)

+0

, но это дает мне 2101, когда я ставлю 64 и 4 в качестве базы, не должен ли он дать мне 100? – Bpk7

+0

Это дает мне 1000, что является правильным результатом. 100 base 4 - 16 base 10. Я не знаю, как вы получили 2101. – JSF

+0

Стоит отметить, что этот код ** не ** конвертируется с базы 10 на другую базу. То, что он делает, - это вычисление числа, цифры которого в базе 10 такие же, как цифры исходного номера, были бы в другой базе. Поэтому, если вы сделаете это преобразование, а затем распечатаете в базе 10, вы получите тот же результат (с учетом многих ограничений), как и печать в нужной базе. – JSF