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("请输入需要计算的数的个数:\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;
}

小编的编程还欠提升,如果有什么小错误,还请大家帮我指出来,我后期我会努力改进滴~谢谢大家啦~

希望该内容能帮大家更好的理解进制转换~

猜你喜欢

转载自blog.csdn.net/weixin_61936651/article/details/123503991