QDU首届易途杯大赛-kk与cillyb的荣誉之战

kk与cillyb的荣誉之战

发布时间: 2017年5月22日 14:30   最后更新: 2017年5月22日 14:33   时间限制: 1000ms   内存限制: 128M

  听说cillyb跟kk要solo了,众所周知cillyb跟kk是冤家一对,他们谁也不服谁,于是cillyb就约战kk再来一场编程solo,kk先发制人给cillyb了一大堆“字符”(字符是指计算机中使用的字母、数字、字和符号,包括:1、2、3、A、B、C、~!·#¥%……—*()——+,空语句等等。  --- 来自百度百科) 叫嚣说:你能把这一堆字符(每个字符的ascll码)用16进制给我输出吗?!结果cillyb抢过键盘,1s就给秒掉了,cillyb说:那我也给你出个简单题,输入的一段字符串,你把这个字符串的长度len给我变成2进制,取后7位,如果除去后七位前边还有1那么就把取出来的7位数在第八位上+1(一共8位数了,第8位是1),然后变成16进制输出,然后将len右移(指的是len的二进制右移)7位,继续上述步骤,(例如10001000100,那么第一次取出来的后七位就是1000100,因为前边还有1,所以第一次取出来的变为11000100,然后将len右移7位得到1000。)最后后面紧接着原始字符串(每个字符的ascll)的16进制把!

kk一下子被惊到了,又要变2进制又要变16进制,只擅长yy的kk怎么会这么吓人的东西,于是就找青岛大学的各位大神们帮助,你们能帮kk解决这个问题并且击败青大手速狗cillyb吗?

第一行输入测试组数t。
之后一段字符串,回车结束( 最多3000000 )

如题意所示

  复制
1
42
023432
  复制
1
yukkuri shiteitte ne!!!
1779756B6B75726920736869746569747465206E65212121

比赛时候题意未正确理解,也没考虑到len=0,无限WA,菜...


#include <bits/stdc++.h>
using namespace std;
char s[3000005], ans[10];
char to_str[] = {"0123456789ABCDEF"};
int t, tmp, k, tot, len, tlen;
void print(int k)	//k最大为255,转为16进制,最多两位,不足两位前位补零 
{
	ans[0] = ans[1] = '0';
	ans[2] = '\0'; tot = 1;
	while(k)
	{
		ans[tot--] = to_str[k%16];
		k /= 16;
	}
	printf("%s", ans);
}
int main()
{
	scanf("%d", &t);
	getchar();
	while(t--)
	{
		gets(s);
		tlen = len = strlen(s);
		if(len == 0) 
		{
			printf("00\n");
			continue;
		}
		while(len)
		{
			tmp = len&127;	//1111111
			if(tmp != len) tmp += 128;//10000000
			print(tmp);
			len >>= 7;
		}
		k = 0;
		while(k < tlen)
		{
			print((int)s[k]);
			++k;
		}
		puts("");
	}
	return 0;
}

继续加油~

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值