思路:将十六进制先转为十进制再转为八进制
十六进制转十进制:与二进制转十进制类似。对十六进制每个数从左往右依次乘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;
}
小编的编程还欠提升,如果有什么小错误,还请大家帮我指出来,我后期我会努力改进滴~谢谢大家啦~
希望该内容能帮大家更好的理解进制转换~