hyhy12123 2024-02-26 16:49 采纳率: 25%
浏览 1

十六进制转八进制问题

#题目是“十六进制转八进制”
#这是我写的代码
#我想着是先十六转十,再十转八,感觉思路没错,但是结果不对,看几个小时没找到问题在哪,晕了要感觉好笨啊
#c语言

#include <stdio.h>
#include <stdlib.h>
#include<math.h>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */
//十六进制转八进制题  
int main() {
    char sixt[10][7];
    int ten[10];
    int n,i,j,l,t;
    int eit[10][100];
//n 代表有多少个数需要转换 
    scanf("%d",&n);
//十六进制转成十进制 
    for(i=0;i<n;i++){
        for(j=0;j<7;j++){
            scanf("%c",&sixt[i][j]);
            if(sixt[i][j]=='\0')
                break;
        }
        t=j;
        ten[i]=0;

        for(l=0;l<t;l++){
        //    ten[i]=ten[i]+
            if(sixt[i][l]>='0'&&sixt[i][l]<='9'){
                ten[i]=ten[i]+(sixt[i][l]-48)*(int)pow(16,t-l-1);
            }
            else if(sixt[i][l]>='A'&&sixt[i][l]<='F'){
                ten[i]=ten[i]+(sixt[i][l]-48-7)*(int)pow(16,t-l-1);
            }
        }
    }
//十进制转换成八进制    
    for(i=0;i<n;i++){
        for(j=0;;j++){
            if(ten[i]>0){
                eit[i][j]=ten[i]%8;
                ten[i]=ten[i]/8;
            }
            if(ten[i]<=0){
                t=j+1;
                break;
            }
        }
        for(l=t-1;l>=0;l--){
            printf("%d",eit[i][l]); 
        }
        printf("\n");
    }
    
    return 0;
}

  • 写回答

6条回答 默认 最新

  • 码农阿豪@新空间代码工作室 Java领域优质创作者 2024-02-26 16:49
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如需一对一服务私聊我哦
    问题:为什么上述代码在将十六进制转换为八进制时输出结果不正确? 结构鲜明解答: 上述代码的十六进制转十进制的部分有一处错误,使用了错误的字符偏移量。其次,在十进制转八进制的部分中,没有处理数字零的情况。 以下是修改后的代码:
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    // 十六进制转八进制题
    int main() {
        char sixt[10][7];
        int ten[10];
        int n, i, j, l, t;
        int eit[10][100];
        scanf("%d", &n);
        
        // 十六进制转十进制
        for (i = 0; i < n; i++) {
            for (j = 0; j < 7; j++) {
                scanf("%c", &sixt[i][j]);
                if (sixt[i][j] == '\0' || sixt[i][j] == '\n')
                    break;
            }
            t = j - 1;
            ten[i] = 0;
            for (l = 0; l <= t; l++) {
                if (sixt[i][l] >= '0' && sixt[i][l] <= '9') {
                    ten[i] = ten[i] + (sixt[i][l] - '0') * pow(16, t - l);
                }
                else if (sixt[i][l] >= 'A' && sixt[i][l] <= 'F') {
                    ten[i] = ten[i] + (sixt[i][l] - 'A' + 10) * pow(16, t - l);
                }
            }
        }
        
        // 十进制转换成八进制
        for (i = 0; i < n; i++) {
            j = 0;
            if (ten[i] == 0) {
                eit[i][j] = 0;
                j++;
            }
            else {
                while (ten[i] > 0) {
                    eit[i][j] = ten[i] % 8;
                    ten[i] = ten[i] / 8;
                    j++;
                }
            }
            for (l = j - 1; l >= 0; l--) {
                printf("%d", eit[i][l]);
            }
            printf("\n");
        }
        
        return 0;
    }
    

    代码中增加了对数字零的处理,同时修改了在十六进制转十进制时使用的偏移量计算方式。另外,输入十六进制数字时,需要注意每个字符之后有一个换行符需要从输入流中读取掉(可以在 scanf() 中使用 %s 代替 %c)。

    评论

报告相同问题?

问题事件

  • 创建了问题 2月26日

悬赏问题

  • ¥15 券商软件上市公司信息获取问题
  • ¥100 ensp启动设备蓝屏,代码clock_watchdog_timeout
  • ¥15 Android studio AVD启动不了
  • ¥15 陆空双模式无人机怎么做
  • ¥15 想咨询点问题,与算法转换,负荷预测,数字孪生有关
  • ¥15 C#中的编译平台的区别影响
  • ¥15 软件供应链安全是跟可靠性有关还是跟安全性有关?
  • ¥15 电脑蓝屏logfilessrtsrttrail问题
  • ¥20 关于wordpress建站遇到的问题!(语言-php)(相关搜索:云服务器)
  • ¥15 【求职】怎么找到一个周围人素质都很高不会欺负他人,并且未来月薪能够达到一万以上(技术岗)的工作?希望可以收到写有具体,可靠,已经实践过了的路径的回答?