ZOJ 3713 In 7-bit

http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5016


【转发 】

题意:(题意不是很好懂)
给定一个字符串,用字符串的ASC2码的16进制数输出 ,并在前面输出字符串长度的16进制,

输出长度的规则是 :先输出长度的二进制数的后七位的十六进制

(如果左边还有1 则这在后七位前面加上个1再输出  然后二进制数右移动七位,直到左边没有1)   

注:所有16数都必须为两位!

***********************************************自己拿样例算算就知道什么意思了

学会用printf 十六进制 学会 二进制的一些简单位运算  对这类题目的处理速度思路很有好处


#include <cstdio>
#include <cmath>
#include <cstring>
#include <string>
#include <algorithm>
#include <iostream>
#include <queue>
using namespace std;


char tmp[3000005];
 
int main()
{
	
	int i,k,j,t,n;
	scanf("%d",&t);
	getchar();
	for (i=1;i<=t;i++)
	{
		gets(tmp);
		int len =strlen(tmp);
		int len1=len;
			 if(len == 0)  //坑。纯空行应输出00
        {  
            printf("00\n");  
            continue;  
        }   
		int tem;
		while(len)
		{
			int tem=len&127;  //取后七位
			if (len>>7)
			{
				tem=tem|128;   //第八位填1
			}
			printf("%02X",tem);
			len>>=7;
		}
		 
		for (j=0;j<len1;j++)
		{
			printf("%02X",tmp[j]);
		}
	 
			printf("\n");
			
	}
			
			
			return 0;
		
	}


你可能感兴趣的:(ZOJ 3713 In 7-bit)