#include<iostream> #include<cstring> #include<string> #include<cstdio> #include<vector> #include<map> using namespace std; char base64t[64]={'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/'};
map<char,int>alter; int r=0; void change(char* c1,char*c2,char *c3,char *c4){ int a1,a2,a3,a4,b1,b2,b3,b4; b1=*c1; b2=*c2; b3=*c3; b4=*c4; b1=alter[(char)b1]; b2=alter[(char)b2]; b3=alter[(char)b3]; b4=alter[(char)b4]; a1=((b1<<2)%256)+(b2>>4); a2=((b2<<4)%256)+(b3>>2); a3=((b3<<6)%256)+b4; *c1=a1; *c2=a2; *c3=a3; *c4=0; } vector<char>ans; void endw(char* c1,char*c2,char *c3,char *c4){ int a1,b1,a2,b2,a3,b3,a4,b4; b1=*c1; b2=*c2; b3=*c3; b4=*c4; if(b4!='='){ b1=alter[(char)b1]; b2=alter[(char)b2]; b3=alter[(char)b3]; b4=alter[(char)b4]; a1=((b1<<2)%256)+(b2>>4); a2=((b2<<4)%256)+(b3>>2); a3=((b3<<6)%256)+b4; r+=3; ans.push_back(char(a1)); ans.push_back(char(a2)); ans.push_back(char(a3)); } if(b4=='='){ if(b3=='='){ b1=alter[(char)b1]; b2=alter[(char)b2]; r+=1; a1=((b1<<2)%256)+(b2>>4); ans.push_back(char(a1)); } if(b3!='='){ b1=alter[(char)b1]; b2=alter[(char)b2]; b3=alter[(char)b3]; r+=2; a1=((b1<<2)%256)+(b2>>4); a2=((b2<<4)%256)+(b3>>2); ans.push_back(char(a1)); ans.push_back(char(a2)); } } } int main(){ for(int i=0;i<64;i++){ alter[base64t[i]]=i; } string s; cin>>s; int len=s.length(); int n=len-4; for(int i=0;i<n;i+=4){ char b1=s[i]; char b2=s[i+1]; char b3=s[i+2]; char b4=s[i+3]; change(&b1,&b2,&b3,&b4); r=r+3; ans.push_back(b1); ans.push_back(b2); ans.push_back(b3); } char e1,e2,e3,e4; e1=s[len-4]; e2=s[len-3]; e3=s[len-2]; e4=s[len-1]; endw(&e1,&e2,&e3,&e4); for(int i=0;i<r;i++)cout<<ans[i]; system("pause"); return 0; }
|