版权声明:本文为博主原创文章,未经博主允许不得转载。 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;
}
这里有些要注意的地方:
- 输出的output数组是反过来的
- output里面可能有大于10的数字,因此最终输出到屏幕上的时候需要将其转换成A,B,C,D……
- 就算input里面有前导0也是ok的,不用改代码,建议以后将这种类型的题目都用这个方法去做,挺好的。