标签:style blog color io os ar for div sp
#include<stdio.h> #include<string> #include<cmath> #include<iostream> using namespace std; int main() { string a,b; int tag,radix; int anum,bnum; //freopen("1010-in.txt","r",stdin); //freopen("1010-out.txt","w",stdout); while(cin>>a>>b>>tag>>radix) { anum=bnum=0; string temp; if(tag==1) { int index=0; for(int j=a.length()-1;j>=0;j--) { anum+=(a[j]>=‘a‘?a[j]-‘a‘+10:a[j]-‘0‘)*pow(radix*1.0,index); index++; } temp=b; }else { int index=0; for(int j=b.length()-1;j>=0;j--) { anum+=(b[j]>=‘a‘?b[j]-‘a‘+10:b[j]-‘0‘)*pow(radix*1.0,index); index++; } temp=a; } //printf("anum=%d\n",anum); char max=0; //get max num; for(int i=0;i<temp.length();i++) { if(temp[i]>max) max=temp[i]; } int maxNum=(max>=‘a‘?max-‘a‘+10:max-‘0‘); bool flag=false; int ind; //printf("maxNum=%d\n",maxNum); long long maxRadix=0xffffffff; maxRadix=maxRadix>>1; for(ind=maxNum+1;ind<=maxRadix;ind++) { bnum=0; int index=0; for(int j=temp.length()-1;j>=0;j--) { bnum+=(temp[j]>=‘a‘?temp[j]-‘a‘+10:temp[j]-‘0‘)*pow(ind*1.0,index); index++; } if(bnum>anum) break; //printf("%d ",bnum); if(anum==bnum) { flag=true; break; } } if(flag) { printf("%d\n",ind==1?ind+1:ind); } else { printf("Impossible\n"); } } }
这道题目误以为基数最大就是36,只拿到19分,但是网上一查才知道基数可以很大很大,可以达到long long类型。如果用上面代码只能得到23分。用long long int是八位。网上说用二分查找,待做。。。。
标签:style blog color io os ar for div sp
原文地址:http://www.cnblogs.com/championlai/p/3980214.html