大整数的任意进制间转换

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Fei20140908/article/details/80882438

这里主要是模拟手动转换的过程,可以自己手动运行一下这个代码。
首先需要把输入的整数字符串转换成一个整数数组,字符串的 长度就是整数数组的长度,输出就是转换后的数组,注意是反的,函数会返回转换后数组的长度。

int conversion(//函数实现任意进制的转换
    int input[],//输入的数字,数字的长度就是数组的长度
    int length,//数字的长度
    int output[],//将结果输出到目标数组,注意这是从低位到高位
    int m,int n //将m进制的输入转换成n进制的输出
){
    int sz=0;// sz用来记录output当前大小
    for(int i=0;i<length;){ // i用来表示被除数当前最高位,手动除法时也是从最高位开始
        int k=0; // k用来记录余数
        for(int j=i;j<length;j++){ // j用来控制从i位置开始的所有有效位
            int t=(input[j]+k*m)%n; // t临时变量用来记录余数
            input[j]=(input[j]+k*m)/n; 
            k=t; 
        }
        output[sz++]=k; // 以十进制转二进制为例,这边余数是最终的二进制数的一部分
        while(input[i]==0)i++; // 被除过一次后会减小,高位会变成零,因此需要重新定位高位,直到被除数除尽
    }
    return sz;
}

这里有些要注意的地方:

  1. 输出的output数组是反过来的
  2. output里面可能有大于10的数字,因此最终输出到屏幕上的时候需要将其转换成A,B,C,D……
  3. 就算input里面有前导0也是ok的,不用改代码,建议以后将这种类型的题目都用这个方法去做,挺好的。

猜你喜欢

转载自blog.csdn.net/Fei20140908/article/details/80882438