题解 | #这道题超好玩#

这道题超好玩

https://ac.nowcoder.com/acm/problem/14589

题号:NC14589

这道题超好玩

链接:https://ac.nowcoder.com/acm/problem/14589 来源:牛客网

题目描述

现在有一串由0 1组成的序列,你的任务是把这串0和1转化为32进制。规定

从10开始转化其所对应的大写字母。比如10 -> A 11 -> B 12 -> C ………

31 -> V

思路:二进制转32进制,可以5个二进制位转为1个32进制位,最后合起来。比如1111100000,11111转为V,00000转为0,合起来就是V0。

附代码:

#include <iostream>
#include <string.h>
#define MAX(x,y) ((x)>(y)?(x):(y))

using namespace std;
void change_2_32(const char *s1, char *out) {
	int len1 = strlen(s1);
	out[(len1 + 4) / 5] = 0;
	for (int i = 0; i < len1; i+=5) {
		int v5 = len1 - 1 - i >=0?s1[len1 - 1 - i]-'0':0;
		int v4 = len1 - 2 - i >= 0 ? s1[len1 - 2 - i] - '0' : 0;
		int v3 = len1 - 3 - i >= 0 ? s1[len1 - 3 - i] - '0' : 0;
		int v2 = len1 - 4 - i >= 0 ? s1[len1 - 4 - i] - '0' : 0;
		int v1 = len1 - 5 - i >= 0 ? s1[len1 - 5 - i] - '0' : 0;
		int v = v1 * 16 + v2 * 8 + v3 * 4 + v4 * 2 + v5;
		if (v >= 10) {
			out[(len1 + 4) / 5 - 1 - i / 5] = (v-10)+'A';
		}
		else {
			out[(len1 + 4) / 5 - 1 - i / 5] = v+ '0';
		}
	}
}
char s1[11000];
char s2[11000];
int main() {
	while (cin >> s1) {
		change_2_32(s1, s2);
		cout << s2 << endl;
	}
}
全部评论

相关推荐

暮雨轻歌:看起来hr不能接受我菜查看图片
点赞 评论 收藏
分享
明天不下雨了:兄弟你是我今天看到的最好看的简历(我说的是简历风格跟简历书写)把985 211再搞亮一点。投boss就说;您好,我华科(985)研二在读,本科211。对您的岗位很感兴趣,希望能获得一次投递机会。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务