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

本文介绍了一种特殊的字符串表示方法:首先将字符串长度转换为二进制并进一步转换为特定格式的十六进制数输出,接着将每个字符也转换为十六进制输出。文中提供了一个C语言实现的示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这里写图片描述

题意:给一个字符串,先输出它的长度,但是长度要先用二进制表示出来,二进制的低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:这题最难的应该就是题意了吧,读了半天都没懂。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值