题号: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;
	}
}