PAT 1010. Radix

题目:http://pat.zju.edu.cn/contests/pat-a-practise/1010

题解:

给两个数a,b和a的进制x,问b在哪个进制下和x进制的a相等。

本来看题目只说明了[0-9][a-z]的意义,以为答案最高只有36进制,提交之后错一大片T^T。测试了下,发现要求的进制竟然很大很大,而且可能超过int的表示范围。

如果从最小的进制开始往上枚举测试,最多只有两个测试点过不去。。。

最后的解法只有网上建议的二分搜索。(那么题目中的多种解输出最小进制不是没有意义么?)

代码:

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
int charToInt(char x)//字符转数字
{
    if('0'<=x&&x<='9')
        return x-'0';
    else
        return x-'a'+10;
}
long long charToDecimal(char* x,long long radix)//字符串转对应进制数字
{
    int len=strlen(x);
    long long ans=0;
    for(int i=0;i=low)
            low=j+1;
    }
    long long high=aimNum+1;//进制上限
    long long aimRadix;
    long long tempAns;
    bool flag=false;
    for(;low<=high;)//二分搜索
    {
        aimRadix=(high+low)/2;
        tempAns=charToDecimal(as,aimRadix);
        if(tempAns==-1||tempAns>aimNum)
            high=aimRadix-1;
        else if(tempAns

来源: http://blog.csdn.net/acm_ted/article/details/20293167


你可能感兴趣的:(PAT)