题解 | #这道题超好玩#
这道题超好玩
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;
}
}