十進制轉任意進制(除留餘數法)
//十進制轉任何進制(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;
}
其他
八進制轉十六進制:八進制 -> 十進制 -> 十六進制
十六進制轉八進制: 十六進制 -> 十進制 -> 八進制