1010 Radix
超级大坑题,无进制范围。
可能超级大,要用ull。
既然这么大,二分来帮忙。
左边要最大,右边是数值。
tag小麻烦,处理看代码。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include<iostream> #include<algorithm> #include<cstdio> #include<cmath> #include<string.h> #define maxn 15 using namespace std; typedef unsigned long long ull; char n1[maxn],n2[maxn],t[maxn]; int tag,radix; ull tran(char s[],ull r) { int l=strlen(s); ull ret=0; for(int i=0;i<l;i++) { ret*=r; if(s[i]>='0'&&s[i]<='9') ret+=s[i]-'0'; else ret+=s[i]-'a'+10; } return ret; } int main() { cin>>n1>>n2>>tag>>radix; if(tag==2) { strcpy(t,n1); strcpy(n1,n2); strcpy(n2,t); } ull t1=tran(n1,radix); int maxx=0; int l2=strlen(n2); for(int i=0;i<l2;i++) { if(n2[i]>='0'&&n2[i]<='9') maxx=max(n2[i]-'0',maxx); else maxx=max(n2[i]-'a'+10,maxx); } ull lo=maxx+1,hi=t1; ull mid; while(lo<hi) { mid=(lo+hi)/2; ull t2=tran(n2,mid); if(t1==t2) lo=hi=mid; else if(t1>t2) lo=mid+1; else hi=mid-1; } if(tran(n2,lo)==t1) cout<<lo<<endl; else cout<<"Impossible"<<endl; return 0; }