[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; }