C++各個進制之間的轉化

十進制轉任意進制(除留餘數法)

//十進制轉任何進制(Int to All) ,R 目標進制 
/**
 *	思路:除留餘數法 
 */
string Itoa(int num,int R )
{
	string ans = "";
	int temp;//中間轉換 
	while(num > 0)
	{
		temp = num % R;
		num = num / R;
		//下面處理 進制 大於 十的情況
		// 並且轉換成字符串 
		if(temp >= 10)
		{
			ans += temp - 10 + 'A';
		} 
		else
		{
			ans += temp + '0';
		}
	} 
	reverse(ans.begin(), ans.end());
	return ans;
}

任意進制轉十進制(按權展開求和)

//R進制某一位tem權值 
int power(int R, int tem)
{
	int ans = 1;
	while(tem--)
	{
		ans = ans*R;
	}
	return ans;
}
//任意進制到 十進制 
long long Atoi(string S, int R)
{
	long long ans = 0;
	for(int i = 0; i <S.size(); i ++)
	{
		if(S[i]-'A'>=0)//處理進制大於十的 
			ans += (S[i] - '0'- 7) * power(R, S.size() -i -1);
		else
			ans += (S[i] -'0') * power(R,S.size() -i - 1);
	}
	return ans;
} 

main函數

int main()
{
	//十進制任意進制
	int n = 10;
	string res = Itoa(n,2);//十轉二 
	cout << res << endl;
	
	//任意進制轉十進制 
	string str = "13";
	long long ans = Atoi(str,8);//八轉十 
	cout << ans << endl;
	
	return 0;
}

其他

八進制轉十六進制:八進制 -> 十進制 -> 十六進制
十六進制轉八進制: 十六進制 -> 十進制 -> 八進制

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章