51nod 1116 K进制下的大数

来源:互联网 发布:金丝楠木淘宝店铺 编辑:程序博客网 时间:2024/06/05 13:32

O(35*n),暴力跑一趟就过了。
就是个大数取模。。。
还可以O(n)过,过段时间还要看看O(n)的解法

#include <bits/stdc++.h>using namespace std;const int MAXN = 1e5+10;int num[MAXN];int nlen;int maxn;//确定最小是几进制bool solve(int k){    int remain = 0;    for(int i = 0; i < nlen; ++i)    {        remain = remain*k+num[i];        remain %= (k-1);    }    if(remain == 0)        return true;    else        return false;}int main(){    char ch;    while((ch=getchar()) && ch != '\n')    {        if(isdigit(ch)) num[nlen++] = ch - '0';        else num[nlen++] = ch - 'A' + 10;        if(num[nlen-1] > maxn)            maxn = num[nlen-1];    }    bool flag = false;    int res;    for(int k = maxn+1; k <= 36; ++k)    {        if(solve(k))        {            flag = true;            res = k;            break;        }    }    if(flag)        printf("%d\n",res);    else        printf("No Solution");    return 0;}