n进制转m进制,虽然知道短除法但是还是不太理解,看了代码理解一些了:
记住这个就好了:
for(int k=0;l; ){ for(int i=l ; i>=1 ; i--){ num[i - 1] += num[i] % m * n; num [i] / =m; } num[k++]=num[0] % m; num[0] /= m; while( l > 0&& num[ l - 1]==0) l--; }
AC代码如下:
#include<cstdio> #include<algorithm> #include<cstring> #include<map> #include<iostream> using namespace std; const int maxn=1200; map<char,int> no; map<int,char> output; int num[maxn],num1[maxn]; char s[maxn]; int main(){ for(int i=‘0‘,j=0;i<=‘9‘;i++,j++) no[i]=j,output[j]=i; for(int i=‘A‘,j=10;i<=‘Z‘;i++,j++) no[i]=j,output[j]=i; for(int i=‘a‘,j=36;i<=‘z‘;i++,j++){ no[i]=j,output[j]=i; } int n,m,k,t; cin>>t; while(t--){ cin>>n>>m; scanf("%s",s); int l=strlen(s); for(int i=0;i<l;i++){ num[l-i-1]=no[s[i]]; } for(k=0;l;){ for(int i=l;i>=1;i--){ num[i-1]+=num[i]%m*n; num[i]/=m; } num1[k++]=num[0]%m; num[0]/=m; while(l>0&&num[l-1]==0)l--; } printf("%d ",n); printf("%s\n",s); printf("%d ",m); for(int i=k-1;i>=0;i--) printf("%c",output[num1[i]]); cout<<"\n"<<endl; } }
原文地址:https://www.cnblogs.com/pkgunboat/p/9315236.html
时间: 2024-11-09 07:46:39