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("\n");

        }

    }

    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("\n");

      

   

   }

return 0 ;

}

 

你可能感兴趣的:(bit)