1010 Radix

超级大坑题,无进制范围。

可能超级大,要用ull。

既然这么大,二分来帮忙。

左边要最大,右边是数值。

tag小麻烦,处理看代码。

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cmath>
#include<string.h>
#define maxn 15
using namespace std;
typedef unsigned long long ull;
char n1[maxn],n2[maxn],t[maxn];
int tag,radix;
ull tran(char s[],ull r)
{
    int l=strlen(s);
    ull ret=0;
    for(int i=0;i<l;i++)
    {
        ret*=r;
        if(s[i]>='0'&&s[i]<='9')
            ret+=s[i]-'0';
        else
            ret+=s[i]-'a'+10;
    }
    return ret;
}
int main()
{
    cin>>n1>>n2>>tag>>radix;
    if(tag==2)
    {
        strcpy(t,n1);
        strcpy(n1,n2);
        strcpy(n2,t);
    }
    ull t1=tran(n1,radix);
    int maxx=0;
    int l2=strlen(n2);
    for(int i=0;i<l2;i++)
    {
        if(n2[i]>='0'&&n2[i]<='9')
            maxx=max(n2[i]-'0',maxx);
        else
            maxx=max(n2[i]-'a'+10,maxx);
    }
    ull lo=maxx+1,hi=t1;
    ull mid;
    while(lo<hi)
    {
        mid=(lo+hi)/2;
        ull t2=tran(n2,mid);
        if(t1==t2)
            lo=hi=mid;
        else if(t1>t2)
            lo=mid+1;
        else
            hi=mid-1;
    }
    if(tran(n2,lo)==t1)
        cout<<lo<<endl;
    else
        cout<<"Impossible"<<endl;
    return 0;
}
View Code

 

posted on 2018-12-09 20:51  FTA_Macro  阅读(170)  评论(0编辑  收藏  举报

导航