• 奇葩题库


    蓝桥杯http://lx.lanqiao.org/problem.page?gpid=T51

      很恶心,今天做进制转换的一道很简单的题,结果自己运行着对,但是提交就一直提示是超时了,找了半天终于找到了,竟然是+运算符号错了。。。这是编译器的BUG吗,还是怎么着啊,反正感觉很奇葩。。。

    代码:

    #include <stdio.h>
    #include <cstring>
    #include <algorithm>
    #include <iostream>
    using namespace std;
    char str[200005];
     
     
    int main()
    {
     int Case;
    scanf("%d",&Case);
    while(Case--){
    string str_16;
    string str_2="";
    
     cin>>str_16;
    
     //修正位 
     int str_16len=str_16.length();
     if(str_16len%3==1)
      str_2="00"+str_2;
     if(str_16len%3==2)  
       str_2="0"+str_2; 
    
      
      //16进制转化为2进制 
     	
         for( int i=0;i<str_16len;i++)
        {
         switch(str_16[i])
          {
           
          case '0':str_2+="0000";break;
          case '1':str_2+="0001";break;
          case '2':str_2+="0010";break;
          case '3':str_2+="0011";break;
          case '4':str_2+="0100";break;
          case '5':str_2+="0101";break;
          case '6':str_2+="0110";break;
          case '7':str_2+="0111";break;
          case '8':str_2+="1000";break;
          case '9':str_2+="1001";break;
          case 'A':str_2+="1010";break;
          case 'B':str_2+="1011";break;
          case 'C':str_2+="1100";break;
          case 'D':str_2+="1101";break;
          case 'E':str_2+="1110";break;
         // case 'F':break;
          default:str_2+="1111";break;
          }
         
          /*         如果使用下面看似相同的switch语句的时候,就会莫名其妙的出错
            switch(str_16[i])
          {	
          case '0':str_2=str_2+"0000";break;
          case '1':str_2=str_2+"0001";break;
          case '2':str_2=str_2+"0010";break;
          case '3':str_2=str_2+"0011";break;
          case '4':str_2=str_2+"0100";break;
          case '5':str_2=str_2+"0101";break;
          case '6':str_2=str_2+"0110";break;
          case '7':str_2=str_2+"0111";break;
          case '8':str_2=str_2+"1000";break;
          case '9':str_2=str_2+"1001";break;
          case 'A':str_2=str_2+"1010";break;
          case 'B':str_2=str_2+"1011";break;
          case 'C':str_2=str_2+"1100";break;
          case 'D':str_2=str_2+"1101";break;
          case 'E':str_2=str_2+"1110";break;
          ///case 'F':str_2+="1111";break;
          default:str_2=str_2+"1111";break;
           
          }*/
        }
    
     
       // string str="";
       int bit=str_2.length(),j=0,i;
        
    	for( i=0;i<=bit-3;i=i+3)
    	{
    	//if(        !( i==0&&(   (str_2[i]-'0')*4+(str_2[i+1]-'0')*2+str_2[i+2]-'0'   )==0 )     )
    	 str[j]=(str_2[i]-'0')*4+(str_2[i+1]-'0')*2+str_2[i+2]  ;
    	 j++;
    	}
    	
    	
    	 i=0;
    	if(!(str[i]=='0'))
          printf("%c",str[i]);
    	for( i=1;i<j;++i)
          printf("%c",str[i]);
         printf("
    ");
    	// cout<<str<<endl; */
    }
    
    return 0;
    }
    

    另外,如果将switch语句改为if  else 如果还是使用str_2=str_2+"xxxx";的话依旧是出错,改为str_2+="xxxx";就又好了,所以出错应该是在+ 这个运算符上,但是究竟是编译器的问题还是其他错,现在还不清楚。。。遇上这样的错真恶心。。。




    
  • 相关阅读:
    LINQ/EF/Lambda 比较字符串日期时间大小
    WinForm RDLC SubReport Step by step
    centos7安装7-zip
    centos修改命令提示符颜色
    更换官方zabbix.repo为阿里云镜像
    利用shell脚本清理nginx日志
    docker
    centos 建立静态 IP 与 IP 地址丢失的解决办法
    构建lnmp高可用架构
    keepalived高可用
  • 原文地址:https://www.cnblogs.com/zswbky/p/5432026.html
Copyright © 2020-2023  润新知