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;
}