[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
", i);
			return 0;
		}
	}
	puts("Impossible!");
	return 0;
}

  

原文地址:https://www.cnblogs.com/zhenghaotian/p/7080701.html