衆所周知,十進制轉其他進制使用的算法是除基取餘法。
代碼描述就是:
int z[50],cnt=0;
do{
z[cnt++]=y%q; //轉爲q進制數
y/=q;
}while(y!=0);
這樣z數組從高位z[num-1]到低位z[0]即爲Q進制z。
不使用while而使用do…while的原因:如果y恰好等於0,那麼並沒有把z[0]賦爲0,且num也沒有自加。因此確定y爲正數的情況下,就可以用while,否則用do…while。
甚至還可以用遞歸算法:
C語言庫函數中的itoa
函數也可以實現將int
型十進制數轉換爲其他進制。
但是如果需要轉換的十進制數並不能用基本類型表示呢(位數比較多)。該十進制數需要用int
型或char
型數組表示。那麼除基取餘算法就需要使用高精度的除法運算和取餘運算。
代碼如下:
string converse(int m,string a,int n){ //將m進制的數a轉換爲n進制
int k,t;
string b="";
for(int i=0;i<a.size();){
k=0; //上一位遺留的餘數
for(int j=i;j<a.size();j++){
t=(k*m+a[j]-'0')%n;
a[j]=(k*m+a[j]-'0')/n+'0';
k=t;
}
b+=to_string(k); //餘數
while(a[i]=='0') i++; //清除前置0
}
reverse(b.begin(),b.end()); //倒轉
return b;
}