进制转换算法

pojg上面第2734,2735是关于8和10机制互转的。

我刚开始用stack方法;

#include<stdio.h>
#include<stdlib.h>
#include<memory.h>
#include<string.h>

class Stack
{
public:
    char a[16];
    int i;
    Stack()
    { 
        i=0;
    }
    void push(char c)
    {
        a[i++]=c;
    }
    bool isEmpty()
    {
        return i==0;
    }
    int pop()
    {
        if(isEmpty()) return -1;
        return a[--i];
    }
};

//十进制转8进制
int main()
{
    Stack s;
    
    int n;
    scanf("%d",&n);
    while(n)
    {
        s.push(n%8);
        n=n/8;
    }
    while(!s.isEmpty())
    {
        
        printf("%d",s.pop());
    }
    printf("
");

 
}

前面已经写过任意进制到十进制转换:

long b2ten(char *x,int b)
{
    int ret=0;
    int len=strlen(x);
    for(int i=0;i<len;i++)
    {
        if(x[i]-'0'>=b) return -1;
        ret*=b;
        ret+=x[i]-'0';
    }
    return (long)ret;
}

转:

m进制转换为n进制-

这种题也是一道经典的面试题,主要考察进制转换细想,Coding质量等。

当我们把十进制转成二进制的时候,我们通过辗转相除,取余,逆置余数序列的过程得到新的进制的数。因此我们可以借助这种思想把M进制转成N进制的数。

如下是C的详细的实现方法

void m2n(int m, char* mNum, int n, char* nNum) 
{
    int i = 0;
    char c, *p = nNum;
 
    //这是一个考察地方,是否能用最少乘法次数。
    while (*mNum != '