春风十里不如你


私信TA

用户名:uq_97472887645

访问量:2302

签 名:

等  级
排  名 1547
经  验 2703
参赛次数 1
文章发表 4
年  龄 23
在职情况 学生
学  校
专  业 软件工程

  自我简介:

TA的其他文章

解题思路:首先我的第一想法是将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 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区