[51nod1116]K进制下的大数

解题关键:$A\% (k - 1) = (A[0] + A[1]*k + A[2]*{k^2} + ...A[n]*{k^n})\% (k - 1) = (A[0] + A[1] + ...A[n])\% (k - 1)$

然后枚举即可,注意上下界。需要注意的坑,K要>Max(A[0]……A[n])。因为2进制中,不会出现3

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
    string s;
    cin>>s;
    int num=0,st=0;
    for(int i=0;i<s.size();i++){
        if(s[i]>='0'&&s[i]<='9') num+=s[i]-'0',st=max(st,s[i]-'0');
        else num+=s[i]-'A'+10,st=max(st,s[i]-'A'+10);
    }
    for(int i=st;i<=36;i++){
        if(num%i==0){
            cout<<i+1<<"\n";
            return 0;
        }
    }
    cout<<"No Solution\n";
    return 0;
}

 

posted @ 2017-11-06 16:41  Elpsywk  阅读(184)  评论(0编辑  收藏  举报