题解 | [NOIP1999]回文数

[NOIP1999]回文数

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

#include <stdio.h>
#include <string.h>

//判断一个数组中的数逆序后是否不变,是返回1,不是返回0
int Re_Able(int Num[], int Length)
{
	int Left = 0;
	int Right = Length - 1;
	while (Left < Right)
	{
		if (Num[Left] != Num[Right])
		{
			return 0;
		}
		Left++;
		Right--;
	}
	return 1;
}

//对存储在数组Num中和数组Re_Num中的N进制数做N进制加法,运算结果覆盖原来的Re_Num数组(结果为逆序),并返回结果的长度
int N_Radix_Add(int N, int Re_Num[], int Num[], int Length)
{
	int i = 0;
	int Signal = 0;
	int Sum = 0;
	for (i = 0; i <= Length; i++)
	{
		Sum = Re_Num[i] + Num[i] + Signal;
		if (Sum >= N)
		{
			Sum = Sum - N;
			Re_Num[i] = Sum;
			Signal = 1;
		}
		else
		{
			Re_Num[i] = Sum;
			Signal = 0;
		}
	}
	if (Re_Num[Length] != 0)//如果最后一位产生进位,则结果长度加1,否则结果长度不变
	{
		Length = Length + 1;
	}
	return Length;
}

//将数组Num中的元素逆序,并将结果传入到Re_Num中
void Reverse(int Num[], int Re_Num[],int Length)
{
	int i = 0;
	for (i = 0; i < Length; i++)
	{
		Re_Num[i] = Num[Length - 1 - i];
	}
}

int main()
{
    int Radix = 0;
	char Num_Char[100] = { 0 };
	//输入进制和数字
	scanf("%d", &Radix);
	getchar();
	scanf("%s", Num_Char);
	
	//对输入数字进行处理
	int Length = 0;
	int i = 0;
	int Num[100] = { 0 };
	int Re_Num[100] = { 0 };
	Length = strlen(Num_Char);
	for (i = 0; i < Length; i++)//把char类型转换为int类型,并传入数组中
	{
		if (Num_Char[i] >= '0' && Num_Char[i] <= '9')//如果输入的为数字
		{
			Num[i] = (int)(Num_Char[i]) - 48;
		}
		else if (Num_Char[i] >= 'A' && Num_Char[i] <= 'E')//如果输入的为字母
		{
			Num[i] = (int)(Num_Char[i]) - 55;
		}
	}
	i = 0;
	Reverse(Num, Re_Num, Length);
	while (Re_Able(Num, Length) == 0)//判断数组中的数是否是回文数,若是则跳出循环,不是则继续计算
	{
		Length = N_Radix_Add(Radix, Re_Num, Num, Length);
		Reverse(Re_Num, Num, Length);
		i++;//记录计算次数
		if (i >= 30)//计算超过30次直接跳出循环
		{
			break;
		}
	}
	//输出结果
	if (i >= 30)
	{
		printf("Impossible!");
	}
	else
	{
		printf("STEP=%d", i);
	}
    return 0;
}

本人菜鸟,想了挺久的😢,大致思路就是用字符串接受输入的数字,转换成整型数组,在数组里进行N进制加法运算,然后判断运算结果是不是回文数,一开始本来想直接把整型数组里的数转换成10进制然后作加法,后面发现步数大了会溢出,只好改成在数组里一位一位的加。

全部评论

相关推荐

零零幺零零幺:至少再做一个项目,然后猛投小厂,不然有点难
点赞 评论 收藏
分享
03-12 14:52
已编辑
长沙学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务