[luoguP1015] 回文数(模拟 + 高精度?)
类似高精的操作。。。
代码
#include <cstdio>
#include <cstring>
#include <iostream>
#define N 100001
int n, len;
int a[N], b[N], c[N];
char m[N];
inline bool check()
{
for(int i = 1; i <= len; i++)
if(a[i] ^ b[i])
return 0;
return 1;
}
int main()
{
int i, j;
scanf("%d", &n);
scanf("%s", m + 1);
len = strlen(m + 1);
for(i = len; i >= 1; i--)
{
if(isdigit(m[i])) a[len - i + 1] = m[i] - '0';
else a[len - i + 1] = m[i] - 'A' + 10;
}
for(i = 1; i <= len; i++) b[len - i + 1] = a[i];
for(i = 1; i <= 30; i++)
{
memset(c, 0, sizeof(c));
for(j = 1; j <= len; j++)
{
c[j] += a[j] + b[j];
c[j + 1] += c[j] / n;
c[j] %= n;
}
len++;
while(!c[len]) len--;
for(j = 1; j <= len; j++) a[j] = c[j];
for(j = 1; j <= len; j++) b[len - j + 1] = a[j];
if(check())
{
printf("STEP=%d\n", i);
return 0;
}
}
puts("Impossible!");
return 0;
}

浙公网安备 33010602011771号