análise de ideias
Estamos todos familiarizados com qualquer conversão entre binário e decimal, pensamento binário é que qualquer conversão de ponte decimal, vire primeiro a números decimais, decimal e, em seguida, vire para a banda-alvo.
Transformar qualquer decimal binário, por exemplo: 45 (8), a casa decimal, que 4x8 = Resultado 1. + 5x8 0 = = 32. 5 + 37 [; que pode ser obtida por cargas cíclicas.
Decimais transformar qualquer banda, tais como 55, se transformar em octal, necessidade de usar short divisão, como mostrado
restante da primeira adição ao contrário na baixa, após isso avançada do relacionamento e a pilha é muito semelhante, podemos usar a pilha para alcançar.
O código principal
int HexAnyToTen(char * num,int hex_begin){
int i = 0,j = 0,k = 1;
int counter = 0;
int prior = 0;
int length = strlen(num);
printf("%d",length);
for(i=0;i < length; i++)
{
k = 1;
for(j=0;j<length-1-i;j++)
{
k *= hex_begin;
}
if(num[i] >= 48&&num[i] <= 57)
{
counter += (num[i] - '0')*k;
prior = num[i] - '0';
}
else if(num[i] >= 65&&num[i] <= 90){
counter += (num[i] - 55)*k;
prior = num[i] - 55;
}
else if(num[i] >= 97&&num[i] <= 122){
counter += (num[i] - 87)*k;
prior = num[i] - 87;
}
else{
if(i==0){
continue;
}
else{
counter = counter - prior*k*(hex_begin -1);
}
}
}
printf("%d\n",counter);
return counter;
}
// 十进制转任意进制
void HexToTenToAny(int num_hex_ten,int hex_after)
{
SeqStack * s;
int x;
s = initSeqStack();
while( num_hex_ten )
{
push(s, num_hex_ten % hex_after);
num_hex_ten /= hex_after;
}
printf("转换成目的进制后:");
while(!isEmpty(s))
{
x = getTop(s);
pop(s);
if(x > 9){
printf("%c",x+87);
}
else{
printf("%d",x);
}
}
printf("\n");
}
entrada de amostra
87475 // 待转换的数字
16 //待转换数字的进制
8 //目的进制
Exemplo de saída
转换成目的进制后:554101
Todos os códigos
água pequena mês de duração Github
Também envolve algum processamento lógica incomum, não sei onde fazer perguntas bem-vindos.