首页 > 代码库 > PAT-1010 Radix (25)

PAT-1010 Radix (25)

#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是八位。网上说用二分查找,待做。。。。

PAT-1010 Radix (25)