A - K进制下的大数

时间:2021-11-21 23:17:25

https://vjudge.net/contest/218366#problem/A

中间溢出,注意求模。

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#include<cmath>
#include<vector>
#include<stack>
#include<queue>
#define lson l, m, rt<<1
#define rson m+1, r, rt<<1|1
#define IO ios::sync_with_stdio(false);cin.tie(0);
#define INF 0x3f3f3f3f
#define MAXN 100010
const int MOD=1e9+;
typedef __int64 ll;
using namespace std;
char s[MAXN];
ll a[MAXN],maxm;
int main()
{
IO;
while(cin >> s){
maxm = -INF ;
ll len = strlen(s);
for(int i = ; i < len; i++){
if(s[i] >= ''&&s[i] <= ''){
a[i] = s[i]-'';
maxm = max(maxm, a[i]);
}
else{
a[i] = s[i]-'A'+;
maxm = max(maxm, a[i]);
}
}
ll flag=, loc, r, sum;
ll beg = max((ll), maxm)+;//起点必须加一
for(int i = beg; i <= ; i++){
r=;sum=;
for(int j = ; j < len; j++){//中间溢出,求模的技巧
sum = (sum+a[len--j]*r%(i-))%(i-);
r = r*i%(i-);
}
if(sum==){
flag=;loc=i;
break;
}
}
if(!flag) cout << "No Solution" << endl;
else cout << loc << endl;
}
return ;
}