十进制转任意进制(除留余数法)
//十进制转任何进制(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;
}
其他
八进制转十六进制:八进制 -> 十进制 -> 十六进制
十六进制转八进制: 十六进制 -> 十进制 -> 八进制