PAT 1010. Radix (25)
阿新 • • 發佈:2018-11-20
#include<iostream> #include<cstring> #include<cstdio> using namespace std; int get(char ch){ if(ch>='0'&&ch<='9'){ return ch-'0'; } else if(ch>='a'&&ch<='z'){ return ch-'a'+10; } } long long change(string str,long long radix){//轉換進位制 long long result=0,tmp=1; int number; for(int i=str.length()-1;i>=0;i--){ number=get(str[i]); result+=number*tmp; if(result<0) return -1; tmp*=radix; } return result; } int main(){ string n1,n2; long long tag,rad1,minrad2,maxrad2,m1,m2; cin>>n1>>n2>>tag>>rad1; if(tag==2){ string tmp=n2; n2=n1; n1=tmp; } m1=change(n1,rad1); minrad2=0; for(int i=0;i<n2.length();i++){ long long t=get(n2[i]); if(t>minrad2){ minrad2=t+1; } } maxrad2=m1+1; while(maxrad2>=minrad2){ long rad2=(minrad2+maxrad2)/2; m2=change(n2,rad2); if(m2>m1||m2==-1){ maxrad2=rad2-1; } else if(m2<m1){ minrad2=rad2+1; } else{ cout<<rad2<<endl; return 0; } } cout<<"Impossible"<<endl; return 0; }