WZ℡T 2018-12-02 14:27 采纳率: 33.3%
浏览 566
已采纳

大佬们帮我看看这道题

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

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

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

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

样例输入
  2
  39
  123ABC

样例输出
  71
  4435274

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

  • 写回答

1条回答 默认 最新

  • threenewbee 2018-12-02 14:44
    关注

    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;
    }
    

    图片说明

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 全书网Java爬取数据
  • ¥15 SAP HANA SQL Script 。SUM OVER 怎么加where
  • ¥15 怎么获取红包封面的原始链接,并且获取红包封面序列号
  • ¥100 微信小程序跑脚本授权的问题
  • ¥60 为什么使用python对地震数据进行umap降维后,数据成图会出现不连续的现象
  • ¥100 房产抖音小程序苹果搜不到安卓可以付费悬赏
  • ¥15 STM32串口接收问题
  • ¥15 腾讯IOA系统怎么在文件夹里修改办公网络的连接
  • ¥15 filenotfounderror:文件是存在的,权限也给了,但还一直报错
  • ¥15 安卓qpython向ksweb服务器post文件失败