解题思路:首先我的第一想法是将n进制数转换为十进制数,然后让十进制数进行相加并判断相加后的十进制数是否为回文数,当然这样并不行。后面我又想我可不可以将相加后十进制数转回原来的进制,但是这样又太麻烦了。所以首先是先翻转数字,然后将这两个n进制数进行相加并判断是否为回文数。

注意事项:如果带有字母的话,程序就无法运行,所以还可以继续完善。本题没有考虑字母就可以通过,如有什么问题,请各位大佬指正!

参考代码:

#include <stdio.h>
#include <math.h>
int numAdd(int n,int a,int b)//n进制加法
{
	int arr[10],i=0,res=0;
	int aa,bb,s,t=0;
	while(1)
	{
		aa=a%10;
		bb=b%10;
		s=aa+bb+t;
		if(s<n)
		{
			arr[i]=s;
			t=0;
		}
		else
		{
			arr[i]=s%n;
			t=1;
		}
		a/=10;
		b/=10;
		i++;
		if(a==0&&t==0)
			break;
	}
	for(int j=i-1;j>=0;j--)
	{
		res=(res+arr[j])*10;
	}
	return res/10;
}
int revNum(int n)//翻转数字
{
	int s=0;
	while(n)
	{
		int t=n%10;
		s=(s+t)*10;
		n/=10;
	}
	return s/10;
}
int isHuiwen(int n)//判断是否为回文数
{
	int a[10],i=0;
	while(n)
	{
		a[i]=n%10;
		n/=10;
		i++;
	}
	for(int j=0;j<i/2;j++)
	{
		if(a[j]!=a[i-j-1])
			return 0;
	}
	return 1;
}
int main()
{
	int n,m,i;
	scanf("%d%d",&n,&m);
	int t=revNum(m);
	for(i=1;i<=30;i++)
	{
		if(isHuiwen(numAdd(n,m,t)))
			break;
		m=numAdd(n,m,t);
		t=revNum(m);
	}
	if(i>30)
		printf("Impossible");
	else
		printf("STEP=%d",i);
}


点赞(0)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论