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;
}

其他

八进制转十六进制:八进制 -> 十进制 -> 十六进制
十六进制转八进制: 十六进制 -> 十进制 -> 八进制

你可能感兴趣的:(数据结构与算法,算法,c++)