大佬们帮我看看这道题

问题描述
  给定n个十六进制正整数,输出它们对应的八进制数。

输入格式
  输入的第一行为一个正整数n (1<=n<=10)。
  接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。

输出格式
  输出n行,每行为输入对应的八进制正整数。

  【注意】
  输入的十六进制数不会有前导0,比如012A。
  输出的八进制数也不能有前导0。

样例输入
  2
  39
  123ABC

样例输出
  71
  4435274

  【提示】
  先将十六进制数转换成某进制数,再由某进制数转换成八进制。

c

1个回答

https://ask.csdn.net/questions/715045
这个问题解决了么?如果解决,请点我回答左上角的采纳。谢谢

每个十六进制数长度不超过100000。
我怀疑题目错了,应该是16进制的数不超过100000吧,要是长度的话,这个数字简直是天文数字了。我按照值不超过100000来写。

#include "stdio.h"

#define N 10

int hex2dec(char * hex)
{
    int n = 0;
    while (*hex != '\0')
    {
        n *= 16;
        if (*hex >= 'A' && *hex <= 'F')
            n += (*hex - 'A' + 10);
        else
            n += (*hex - '0');
        hex++;
    }
    return n;
}

int dec2oct(int n)
{
    int r = 0;
    int base = 1;
    while (n > 0)
    {
        r += base * (n % 8);
        n /= 8;
        base *= 10;
    }
    return r;
}

int main()
{
    int n;
    int ans[N];
    scanf("%d", &n);
    for (int i = 0; i < n; i++)
    {
        char hex[10];
        scanf("%s", hex);
        int n = hex2dec(hex);
        ans[i] = dec2oct(n);
    }
    for (int i = 0; i < n; i++)
    {
        printf("%d\n", ans[i]);
    }
    return 0;
}

图片说明

caozhy
贵阳老马马善福专业维修游泳池堵漏防水工程 回复weixin_43759092: 先16进制转10进制,再10进制转8进制
12 个月之前 回复
weixin_43759092
WZ℡T 大佬 萌新看不懂 能说一下思路吗? 谢谢大佬
12 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!