您的位置:首页 > 其它

ZOJ 3713 In 7-bit(进制转换)

2017-04-07 18:48 330 查看


题意:给一个字符串,先输出它的长度,但是长度要先用二进制表示出来,二进制的低7位左边如果没有1了,就直接将这7位二进制转化成16进制输出,如果左边还有1,就把这个低7位变成8位,最高的那位是1,然后把这个8位二进制转化成16进制输出,然后长度右移7位,重复这个操作。

比如说长度是1 001 000 001(2) = 577(10) ,先输出低7位1000 001 的16进制表示形式,但是因为这个低7位左边还有1,所以就输出11 000 001的16进制表示形式C1,然后还剩下100,再输出04。

长度处理完了之后再将每一个字符用16进制表示出来输出即可。空格也算字符。

思路:先对长度进行判断,如果长度右移7位后还有值,那么就需要将长度(二进制)左7位表示的十进制的值加上128之后再按16进制输出,并且长度右移7位(具体详见代码)

代码:

#include<stdio.h>
#include<string.h>
#define maxn 3000010
char str[maxn];
int main()
{
int t;
scanf("%d",&t);
getchar();
while(t--)
{
gets(str);
int len=strlen(str);
if(!len)
{
printf("00\n");
continue;
}
while(len)
{
int tot=(len%128);
len>>=7;
if(len)
tot+=128;
printf("%02X",tot);
}
len=strlen(str);
for(int i=0;i<len;++i)
printf("%02X",str[i]);
printf("\n");
}
return 0;
}


ps:这题最难的应该就是题意了吧,读了半天都没懂。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: