您的位置:首页 > 其它

zoj 3713 In 7-bit

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

#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 ;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: