这个题最重要的就是读懂题意,就是把给的字母Aascii值换为8位二进制,如果换成的总个数不是6的倍数,就在最后加上0变为0的倍数,然后再6位代表一个字符,如果不是4的倍数就加上“=”凑成4的倍数,然后循环k次,注意每次加上的“=”也要计算。
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<queue>
#include<stack>
#include<set>
#include<map>
#include<iostream>
#include<string>
using namespace std;
char s[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
string s1;
int n;
string bbbb(char ch)
{
string ss;
for(int i = 1; i <= 8; i++)
{
ss += ch % 2 + '0';
ch /= 2;
}
reverse(ss.begin(), ss.end());
return ss;
}
int ten(int x,string sum)
{
int num = 0;
for(int i = x; i < x + 6; i++)
{
num = num * 2 + sum[i] - '0';
}
return num;
}
string solve()
{
string sum;
int len = s1.size();
for(int i = 0; i < len; i++)
{
string p = bbbb(s1[i]);
sum += p;
}
int num = 6 - sum.size() % 6;
if(num == 6)
num = 0;
for(int i = 1; i <= num; i++)
{
sum += '0';
}
int ans = 0;
string s0;
for(int i = 0; i < sum.size(); i+=6)
{
ans = ten(i, sum);
s0 += s[ans];
}
return s0;
}
int main()
{
ios::sync_with_stdio(false);
int T;
cin >> T;
int case_ = 0;
while(T--)
{
scanf("%d", &n);
cin >> s1;
printf("Case #%d: ", ++case_);
while(n--)
{
s1 = solve();
if(s1.size() % 4 != 0)
{
int l = 4 - s1.size() % 4;
for(int i = 1; i <= l; i++)
s1 += '=';
}
}
cout << s1 << endl;
}
return 0;
}