思路:将十六进制先转为十进制再转为八进制
十六进制转十进制:与二进制转十进制类似。对十六进制每个数从左往右依次乘16的0,1,2,......并相加得到相应的十进制。
比如:对123ABC,12×16(0)+11×16(1)+10×16(2)+3×16(3)+2×16(4)+1×16(5)
十进制转八进制:与十进制转二进制类似。十进制的数对8取余并保存,最后将所得所有余数倒着输出,所得结果即为所得八进制结果。
比如:对39,39%8=7,39/8=4,4%8=4,4/8=0。余数为74,所以所得八进制为47。
以下是代码详情:
#include<stdio.h>
#include<string.h>
#include<math.h>
int main()
{
char a[100][100],b[100][100];
int i,j,m,k;
long long n=0;
printf("请输入需要计算的数的个数:\n");
scanf("%d",&m);
for(k=0;k<m;k++)//要输入m行的十六进制
{
printf("请输入第%d个十六进制数:\n",k+1);
scanf("%s",a[k]);
for (i=0;a[k][i]!='\0';i++)//十六进制转十进制
{
if(a[k][i]>='A' && a[k][i]<='F')//将十六进制的字母转为数字方便计算
a[k][i]=(a[k][i]-'A')+10+'0';
n+=((a[k][i]-'0')*(pow(16,strlen(a[k])-1-i)));//转十进制
}
for(j=0;;j++)//十进制转为八进制并存入数组B中
{
b[k][j] = n % 8;
n = n / 8;
if (n == 0)
{
break;
}
}
}
for(k=0;k<m;k++)//输出八进制
{
printf("所得第%d个八进制数为:",k+1);
for (j = strlen(b[k])-1; j >= 0; j--)//从后往前倒着输出
{
printf("%d", b[k][j]);
}
printf("\n");
}
return 0;
}
小编的编程还欠提升,如果有什么小错误,还请大家帮我指出来,我后期我会努力改进滴~谢谢大家啦~
希望该内容能帮大家更好的理解进制转换~