PAT1010(BUG)

来源:互联网 发布:知乎法国婆婆 编辑:程序博客网 时间:2024/05/19 19:30

http://www.patest.cn/contests/pat-a-practise/1010
思路:都转化为10进制,然后比较大小即可。
BUG之处在于:题目中测试用的进制可能非常的大,表现为:如果把下列程序的max缩小,错误测试点会增加,而如果增加到很大,个别测试点会超时,并且long long也未必能存下这么大的数字,待学过算法以后再来解决。

#include <iostream>#include <string>#include <cmath>#define max 1000using namespace std;const char radix[]="0123456789abcdefghijklmnopqrstuvwxyz";long long convers_to_deci(string ,int );                     //将一个string类型转化为10进制整型并返回 int main(){    string N1,N2;    int tag,rdx,isOK=0;    long long N1_deci,N2_deci;    cin>>N1>>N2>>tag>>rdx;    switch(tag){        case 1:            N1_deci=convers_to_deci(N1,rdx);            for(int i=1;i<=max;++i){                          if(N1_deci==convers_to_deci(N2,i)){                    cout<<i;                    isOK=1;                    break;                }            }            break;        case 2:            N2_deci=convers_to_deci(N2,rdx);            for(int i=1;i<=max;++i){                if(N2_deci==convers_to_deci(N1,i)){                    cout<<i;                    isOK=1;                    break;                }            }            break;    }    if(!isOK){        cout<<"Impossible";    }    return 0;} long long convers_to_deci(string s,int rdx){    int dgt,exp,ret=0;    for(int i=s.length()-1;i>=0;--i){        for(int j=0;j<sizeof(radix);++j){            if(s[i]==radix[j]){                dgt=j;                break;            }        }        exp=s.length()-i-1;        ret+=dgt*pow(rdx,exp);    }    return ret;}
0 0
原创粉丝点击