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