十進制轉其他進制

衆所周知,十進制轉其他進制使用的算法是除基取餘法。
在這裏插入圖片描述
代碼描述就是:

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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章