| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5737 人关注过本帖
标题:2017.2.26 十六进制转八进制,Dev上运行正确,但在蓝桥杯上提交后提示运行 ...
取消只看楼主 加入收藏
Leo_L
Rank: 2
等 级:论坛游民
帖 子:21
专家分:27
注 册:2017-2-26
结帖率:71.43%
收藏
已结贴  问题点数:20 回复次数:4 
2017.2.26 十六进制转八进制,Dev上运行正确,但在蓝桥杯上提交后提示运行错误,求大神指导
/*
问题描述
  给定n个十六进制正整数,输出它们对应的八进制数。

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

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

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

样例输入
  2
  39
  123ABC

样例输出
  71
  4435274

*/
#include<stdio.h>
#include<string.h>
int main(){
    int n=0,i=0,j=0,k=0,m=0,w[10]={0},length=0;
    char c[10]="",c2[50]="",c3[10][20],str[4]="";
    for(i=0;i<10;i++){
        strcpy(c3[i],"");
    }
    //c1为十六进制数,c2为转化成的二进制数,c3存储八进制数,每个结果为一行
    scanf("%d",&n);
   
    for(i=0;i<n;i++){
        
        strcpy(c2,"");
        k=0;
        
        scanf("%s",c);
        //转化成二进制数
        length=strlen(c);
        for(j=0;j<length;j++){
            switch(c[j]){
                case '0':strcat(c2,"0000");break;
                case '1':strcat(c2,"0001");break;
                case '2':strcat(c2,"0010");break;
                case '3':strcat(c2,"0011");break;
                case '4':strcat(c2,"0100");break;
                case '5':strcat(c2,"0101");break;
                case '6':strcat(c2,"0110");break;
                case '7':strcat(c2,"0111");break;
                case '8':strcat(c2,"1000");break;
                case '9':strcat(c2,"1001");break;
                case 'A':strcat(c2,"1010");break;
                case 'B':strcat(c2,"1011");break;
                case 'C':strcat(c2,"1100");break;
                case 'D':strcat(c2,"1101");break;
                case 'E':strcat(c2,"1110");break;
                case 'F':strcat(c2,"1111");break;
            }
        }//转化成二进制数
        
    //转化成八进制数
        j=strlen(c2)-1;
        while(j>=0){
        
            if(j==0){//位数不足,只剩一位时
                if(c2[0]=='0'){
                    c3[m][++k]='0';break;
                }
                else if(c2[0]=='1'){
                    c3[m][++k]='1';break;
                }
            }
            else if(j==1){//位数不足,只剩两位时
                if(c2[0]=='0'&&c2[1]=='0'){
                     c3[m][++k]='0';break;
                }
                else if(c2[0]=='0'&&c2[1]=='1'){
                     c3[m][++k]='1';break;
                }
                else if(c2[0]=='1'&&c2[1]=='0'){
                     c3[m][++k]='2';break;
                }
                else if(c2[0]=='1'&&c2[1]=='1'){
                     c3[m][++k]='3';break;
                }
            }
            else {//取得三位01串
                 ++k;
                 str[2]=c2[j];
                str[1]=c2[--j];
                str[0]=c2[--j];
              
                if(strcmp(str,"000")==0)c3[m][k]='0';
                if(strcmp(str,"001")==0)c3[m][k]='1';
                if(strcmp(str,"010")==0)c3[m][k]='2';
                 if(strcmp(str,"011")==0)c3[m][k]='3';
                 if(strcmp(str,"100")==0)c3[m][k]='4';
                if(strcmp(str,"101")==0)c3[m][k]='5';
                if(strcmp(str,"110")==0)c3[m][k]='6';
                if(strcmp(str,"111")==0)c3[m][k]='7';
               
                --j;
            }   
        }
        w[m]=k;
        m++;
        
    }//转化为八进制数
     
    //输出结果
    for(i=0;i<m;i++){
        k=w[i];
        if(c3[i][k]!='0')printf("%c",c3[i][k]); //避免输出前导0
        for(j=k-1;j>0;j--){
               printf("%c",c3[i][j]);
        }
        printf("\n");
    }
      
    return 0;
}
求大神@ W @
搜索更多相关主题的帖子: 十六进制 include 八进制 正整数 字符串 
2017-02-26 10:25
Leo_L
Rank: 2
等 级:论坛游民
帖 子:21
专家分:27
注 册:2017-2-26
收藏
得分:0 
我的第一个注释有点错误:c是 十六进制数,不是c1

元气少女Leo_L
2017-02-26 11:29
Leo_L
Rank: 2
等 级:论坛游民
帖 子:21
专家分:27
注 册:2017-2-26
收藏
得分:0 
回复 2楼 renkejun1942
我的代码测试数据是对的,但提交后就是提示“运行错误”,不知道是不是有哪些测试数据的情况没想到

元气少女Leo_L
2017-02-26 11:31
Leo_L
Rank: 2
等 级:论坛游民
帖 子:21
专家分:27
注 册:2017-2-26
收藏
得分:0 
回复 7楼 xzlxzlxzl
我也觉得我写的很麻烦呀,可是想不出别的方法。。请问是怎么能用不超过20行实现呀?求教[/笔芯]

元气少女Leo_L
2017-02-27 17:41
Leo_L
Rank: 2
等 级:论坛游民
帖 子:21
专家分:27
注 册:2017-2-26
收藏
得分:0 
回复 8楼 rjsp
请问那个size_t是什么意思呀

元气少女Leo_L
2017-02-27 17:43
快速回复:2017.2.26 十六进制转八进制,Dev上运行正确,但在蓝桥杯上提交后提示 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018683 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved