zoj 3713 In 7-bit

刚开始没注意它规定的范围,就是用了位运算。感觉挺好。已提交超时了!回头看它的数组非常大,一个循环内部稍微多几步操作就会超时

#include<stdio.h>
#include<string.h>
char str[3000006];
int main(int argc, char* argv[])
{
    int t,i;
    int len;
    
    int pre,later;
    while(scanf("%d",&t)!=EOF)
    {
        getchar();
        while(t--)
        {
            
            gets(str);
            len=strlen(str);
            do
            {
                pre=len>>7;
                later=len&127;
                if(pre>0)
                later=later|128;
                printf("%02X",later);
                len=len>>7;
                
            }while(pre!=0);/*如果前面还有1就在循环一直到长度的所有值输出完毕 */
            for(i=0;i<strlen(str);i++)
            printf("%02X",str[i]);
            
            printf("
");
        }
    }
    return 0;
}

后来看网上的,确实比我的省时多了

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<time.h>
#include<math.h>
char str[3000005];/*最高位是22位*/ 
int bi[100];
int main()
{
   int t,k,b,d,c,i; 
   scanf("%d",&t);
   getchar();
   while(t--)
   {
      gets(str);
      k = strlen(str);
      b = 2097152,c = 16384 , d= 128;/*高位第22,15,8位*/
      if(k >= b)/*最高位21位上是为1*/ 
      {
        printf("%02X",k%d+d);/*取余加上第8位的1*/ 
        printf("%02X",k%c/d+d);
        printf("%02X",k%b/c+d);
        printf("%02X",k/b); 
      }
      else if(k >= c)/*第二个个高位14位上是为1*/ 
      {
         printf("%02X",k%d+d);
         printf("%02X",k%c/d+d);
         printf("%02X",k/c);
      }
      else if(k >= d)/*第7为上位1*/ 
      {
        printf("%02X",k%d+d);
         printf("%02X",k/d);
      }
      else 
      printf("%02X",k);
      
      for(i = 0 ;i < k ;i ++)  
      printf("%02X",str[i]);
       printf("
");
      
   
   }
return 0 ;
}
原文地址:https://www.cnblogs.com/woshijishu3/p/3592691.html