As we already know, base64 is a common binary-to-text encoding scheme. Here we define a special series of positional systems that represent numbers using a base (a.k.a. radix) of 2 to 62. The symbols ‘0’ – ‘9’ represent zero to nine, and ‘A’ – ‘Z’ represent ten to thirty-five,and ‘a’ – ‘z’ represent thirty-six to sixty-one. Now you need to convert some integer z in base x into base y.
The input contains three integers x; y (2 ≤ x; y ≤ 62) and z (0 ≤ z < x120), where the integer z is given in base x.
Output the integer z in base x.
16 2 FB
11111011
直接将任意进制数转为任意进制数,把样例带进去手推一遍你就明白了。
#include<cstdio> #include<cstring> #include<cmath> #include<iostream> using namespace std; char str1[2000005],str2[2000005]; int x[2000005],l,ans[2000005],n,m,k; void trans() { l=strlen(str1); for(int i=0;i<l;i++) { if(str1[i]>=‘0‘&&str1[i]<=‘9‘)x[i]=str1[i]-‘0‘; else if(str1[i]>=‘A‘&&str1[i]<=‘Z‘)x[i]=str1[i]-‘A‘+10; else if(str1[i]>=‘a‘&&str1[i]<=‘z‘)x[i]=str1[i]-‘a‘+36; } } void trans2() { int j=0; for(int i=k-1;i>=0;i--) { if(ans[i]>=0&&ans[i]<=9)str2[j]=ans[i]+‘0‘; else if(ans[i]>=10&&ans[i]<=35)str2[j]=ans[i]-10+‘A‘; else if(ans[i]>=36&&ans[i]<=62)str2[j]=ans[i]-36+‘a‘; j++; } } int main() { int j=0;k=0; scanf("%d %d %s",&n,&m,str1); trans(); while(j<l) { for(int i=j;i<l-1;i++) { x[i+1]+=x[i]%m*n; x[i]/=m; } ans[k]=x[l-1]%m;k++; x[l-1]/=m; while(x[j]==0&&j<l)j++; } trans2(); cout<< str2; return 0; }
原文:https://www.cnblogs.com/wisdom-jie/p/14765137.html