廣東省賽B題 Base64


什么都不想說了,直接貼代碼。

#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;
}

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com