什么都不想说了,直接贴代码。
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<string>
#include<ctime>
#include<cmath>
#include<algorithm>
#include<map>
#include<set>
#include<vector>
#include<iostream>
using namespace std;
#define RE(x) freopen(x,"r",stdin);
#define WR(x) freopen(x,"w",stdout);
const int N = 100005;
const int MOD = 100005;
const int MAXN = 1e7+9;
char str[]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
string base64(string s)
{
int a,b,c;
string ret="";
int l=s.length();
s[l]=s[l+1]=s[l+2]=0;//补够3N个字符
for(int i=0;i<(l-1)/3+1;i++)
{
int t=(((int)s[3*i])<<16)+(((int)s[3*i+1])<<8)+(int)s[3*i+2];//合并三个字符成24位二进制
char ss[5]="";
for(int j=3;j>=0;j--){
ss[j]=str[t&63];//每六位二进制截取一次
t>>=6;
}
ret+=ss;
}
if(l%3==1){
ret[ret.length()-1]=ret[ret.length()-2]='=';
//如果多出一个字符,则多出8位二进制,然后最后两位则为‘=’
}
if(l%3==2){
ret[ret.length()-1]='=';
//如果多出两个字符,则多出16位二进制,然后最后一位则为‘=’
}
return ret;
}
int main()
{
int n,cc=1;
string s;
int t;
scanf("%d",&t);
while(t--)
{
cin>>n>>s;
printf("Case #%d: ",cc++);
for(int i=0;i<n;i++){
s=base64(s);
}
cout<<s<<endl;
}
return 0;
}