题解 | #[NOIP1999]回文数#

[NOIP1999]回文数

https://www.nowcoder.com/practice/a432eb24b3534c27bdd1377869886ebb

#include <stdio.h>


int Check(char outzu[],int n)//返回一为真
{
	int i = 0;
	for (i = 0; i < n / 2;i++)
	{
		if (outzu[99 - i] != outzu[100 - n + i])
		{
			return 0;
		}
	}
	return 1;
}//从后开始判断

int main()
{
	char arr[16] = { '0','1','2','3','4','5','6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
	char inzu[100] = { 0 };
	char outzu[100] = { 0 };
	int a = 0, b = 0;
	int n = 0;
	int i1 = 0, i2 = 0;
	int flag = 0;
	int flag2 = 0;
	scanf("%d %s", &a, inzu);//a是进制,b是数字
	n = strlen(inzu);
	for (i1 = 0; i1 < n; i1++)
	{
		outzu[99 - i1] = inzu[i1];
	}
	flag = Check(outzu,n);
	if (flag == 1)
	{
		printf("STEP=0");
	}
	else
	{
		for (i1 = 0; i1 < n; i1++)
		{
			inzu[99 - i1] = outzu[99-i1];
		}//初始化
		int step = 0;
		while (step <= 30)
		{
			int c = 0;
			for (i1 = 0; i1 < n ; i1++)
			{
				if (inzu[99 - i1] >= 'A')
				{
					inzu[99 - i1] = inzu[99 - i1]-'A'+10+'0';
				}
				if (inzu[100 - n + i1] >= 'A')
				{
					inzu[100 - n + i1] = inzu[100 - n + i1] - 'A' + 10 + '0';
				}
				int tmp = (inzu[99 - i1] + inzu[100 - n + i1] - 2 * '0'+c) % a;
				outzu[99 - i1] = arr[tmp];
				if (inzu[99 - i1] + inzu[100 - n + i1] - 2 * '0' +c>= a)
				{
					c = 1;
				}
				else
				{
					c = 0;
				}
			}
			if (c == 1 && i1 == n )
			{
				outzu[99 - i1 ] = '1';
				n++;
			}
			step++;
			flag = Check(outzu, n);
			if (flag == 1)
			{
				printf("STEP=%d", step);
				flag2 = 1;
				break;
			}
			else
			{
				for (i1 = 0; i1 < n; i1++)
				{
					inzu[99 - i1] = outzu[99 - i1];
				}//初始化
			}
		}
	}
	if (flag == 0)
	{
		printf("Impossible!");
	}
	return 0;
}

全部评论

相关推荐

03-24 21:23
已编辑
郑州大学 Java
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务