C语言十六进制转八进制
思路:将十六进制先转为十进制再转为八进制
十六进制转十进制:与二进制转十进制类似。对十六进制每个数从左往右依次乘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("请输入需要计算的数的个数: "); scanf("%d",&m); for(k=0;k<m;k++)//要输入m行的十六进制 { printf("请输入第%d个十六进制数: ",k+1); scanf("%s",a[k]); for (i=0;a[k][i]!= ;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(" "); } return 0; }
小编的编程还欠提升,如果有什么小错误,还请大家帮我指出来,我后期我会努力改进滴~谢谢大家啦~
希望该内容能帮大家更好的理解进制转换~