此篇博客是摘抄总结的,巩固基础。
上代码:
- 二进制转十进制:
int BinarytoDecimal(long long n)
{
int decimalnumber = 0, i = 0, remainder;
while(n!=0)
{
remainder = n%10;
n/=10;
decimalnumber += remainder*pow(2,i);
i++;
}
return decimalnumber;
}
由于二进制的长度较长,所以定义的是longlong类型。且编写的函数中用到了pow()函数,所以在使用之前需要调用<math.h>头文件。每一步的代码的具体含义可以自行揣度,并不难。
同理,八进制转十进制也可以根据上述代码加以修改便能使用,原理相同。
- 八进制转十进制:
上代码:
int OctaltoDecimal(long long n)
{
int decimalnumber = 0, i = 0, remainder;
while(n!=0)
{
remainder = n%10;
n/=10;
decimalnumber += remainder*pow(8,i);
i++;
}
return decimalnumber;
}
- 十六进制转十进制:
当然十六进制转十进制稍微有点难度,其难点在于输入十六进制时输入的是字符串而不是整数,所以我们必须从字符串着手。
上代码:
int HexadecimaltoDecimal(char a[], int length)
{
int i, j;
int decimalnumber = 0;
for(i=length-1,j=0;i>=0;i--,j++)
{
if(isalpha(a[i]))
decimalnumber += (a[i]-'A'+10)*pow(16,j);
else
decimalnumber += (a[i]-'0')*pow(16,j);
}
return decimalnumber;
}
机制与二进制转十进制的进制类似,但是需要对每个字符进行处理,使每一位都变成意义想通的整数。需要用到<math.h>,<string.h>两个头文件。
- 十进制转二进制
上代码:
int DecimaltoBinary(int n)
{
long binarynumber = 0;int i = 1, remainder;
while(n!=0)
{
remainder = n%2;
n /= 2;
binarynumber += remainder*i;
i *= 10;
}
return binarynumber;
}
其实十进制转二进制还有一种思路,那就是通过定义一个整数数组,把十进制数模2的余数存进去,最后倒叙输出即可。
上代码:
int a[100];
int DecimaltoBinary(int n)
{
int i = 0, remainder;
while(n!=0)
{
remainder = n%2;
n /= 2;
a[i++] = remainder;
}
for(i=i-1;i>=0;i--)
printf("%d", a[i]);
}
此处需要定义一个全局数组。
- 十进制转八进制
上代码:
int DecimaltoOctal(int n)
{
int octalnumber = 0, i = 1;
while (n != 0)
{
octalnumber += (n % 8) * i;
n /= 8;
i *= 10;
}
return octalnumber;
}
- 十进制转十六进制
这个就稍显麻烦了,网上看到过一种思路,就是将十进制数对16取模,然后用一个数组将每个余数存起来,定义一个函数将数组的每个数转换成十六进制的数码即可
上代码:
#include <stdio.h>
char getnum(int a)
{
switch(a) //进制转换
{
case 0:
return '0';
break;
case 1:
return '1';
break;
case 2:
return '2';
break;
case 3:
return '3';
break;
case 4:
return '4';
break;
case 5:
return '5';
break;
case 6:
return '6';
break;
case 7:
return '7';
break;
case 8:
return '8';
break;
case 9:
return '9';
break;
case 10:
return 'A';
break;
case 11:
return 'B';
break;
case 12:
return 'C';
break;
case 13:
return 'D';
break;
case 14:
return 'E';
break;
case 15:
return 'F';
break;
}
}
int main()
{
int a[128];
int n,i=0;
scanf("%d",&n);
if(n==0)
{
printf("0");
}
else
{
while(n)
{
a[i++]=n%16;
n/=16;
}
for(i=i-1; i>=0; i--)
{
putchar(getnum(a[i]));
}
}
return 0;
}
至于还有其他的转换,就可以通过上述转换为中间媒介进行转换。