之前做题目时遇到了进制转化的问题,就想总结一下用法
我们常用的进制转换有二进制、八进制、十进制和十六进制的转换,两种非十进制的转换我们通常先将其转换十进制,然后再进行转换。
以下列举常用的进制转化的代码实现:
十进制转二进制
void turn(int n)
{
if (n > 0)
{
f(n/2);//递归
cout << n % 2 << ' ';
}
return;
}
二进制转十进制
int turn(char a[],int len)
{
int ans = 0;
for (int i = 0; i < len; i++)
{
ans += a[i] * pow(2, len - 1);
}
return ans;
}
八进制转十进制
int turn(char a[])
{
int t, sum = 0;
for (int i = 0; a[i]; ++i)
{
t = a[i] - '0';
sum = sum * 8 + t;
}
return sum;
}
十进制转八进制
int turn(int n)
{
int k = 0,i = 0;
while(n != 0)
{
k += n % 8 *pow(10,i);
n /= 8;
i++;
}
return k;
}
十进制转十六进制
void a(int m)
{
int t = 0, k = 0;
char b[500] = { 0 };
while (m >= 16)
{
k = m % 16;
m = m / 16;
if (k > 9)
b[t++] = k - 10 + 'A';
else
b[t++] = k + '0';
}
if (m > 9)
b[t++] = m - 10 + 'A';
else
b[t] = m + '0';
for (; t >= 0; --t)
printf("%c", b[t]);
printf("\n");
return;
}
十六进制转十进制
int turn (char s[])
{
long long sum = 0;
int len = strlen(s);
long long z = 1;
for (int i = len - 1; i >= 0; i--)
{
if (s[i] >= 'A' && s[i] <= 'F')
{
sum += (z) * int(s[i] - 55);
}
else
sum += (z) * int(s[i] - '0');
z = z * 16;
}
return sum;
}