【NEU8.3积分赛】

整体题目属于那种题目描述冗繁,但其实解法很暴力。

1.ZOJ3708  《行车路线/公交车数目》      题意理解问题,囧,坑了队友。

2.ZOJ3710  《会发展的朋友关系》    暴力搜索,结束的条件挺好,看题目时限直接暴力。while(1) {num=0;........if(num!=0) break;}

3.ZOJ3713  《7 bit》 这题自己必重新过一遍,注意一下细节,也强化一下自己关于ASCAL码及hex的了解。

                       现在终于看明白了。

                       先打印长度,以长度为前缀,length_prefixed;  然后再是逐个打印每个字符的hex;

                      长度(转化为二进制后)超过7个的时候,前面要加1补在最左位,而后右移7位(一开始就是这地方不明白~~囧~~),不断的右移7位直到7位能存下,并且到最后还得把剩下的二进制数转化为hex输出。

                      输出长度的规则是 先输出长度的二进制数的后七位的十六进制(如果左边还有1 则这在后七位前面加上个1再输出  然后二进制数右移动七位,直到左边没有1)   注:所有16数都必须为两位!

                      ps:gets读到回车结束。

                      附代码:

                    

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
char s[3000010];
int main()
{
	int t,i;
	scanf("%d",&t);
	getchar();
	while(t--)
	{
		gets(s);
		int len=strlen(s);
		printf("%d\n",len);
		if(len==0)printf("00\n");  //不可忽视的一个环节
		else
		{
			int temp=len;
			while(temp)
			{
				if(temp>=128)
				{
					printf("%02X",temp%128+128);//02X是保留两位对吧 
					temp/=128;
				}
				else
				{
					printf("%02X",temp);
					break;
				}
			}
			for(i=0;i<len;i++)printf("%02X",s[i]);
			printf("\n");
		}
	}
	return 0;
}

printf("%02X",temp%128+128);//02X是保留两位对吧

 temp/=128;

这几步异常重要哦,自己可以结合十进制的移位来记。56除以10只剩5;

 通过二进制位数可想明显其中道理,必劳记!

另一

  1.   while(1)  
  2.         {  
  3.             printf("%02X",(len&127)+(len>127?128:0));  
  4.             len>>=7;  
  5.             if(len==0)  break;  
  6.         }


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值