同构数,普通方法和递归法实现

//同构数,输出2~1000之间的所有同构数,所谓的同构数,就是指它出现在他的平方数的右端 
//例如5,6,25的平方分别等于25,36,625,所以5,6和25都是同构数

#include<stdio.h>
int main()
{
	//同构数,输出2~1000之间的所有同构数,所谓的同构数,就是指它出现在他的平方数的右端 
	//例如5,6,25的平方分别等于25,36,625,所以5,6和25都是同构数
	int i,j;
	int t;
	for(i=2;i<1000;i++)
	{
		t=i*i;
		if(i<10)
		{
			j=t%10;
			if(j==i)
			{
				printf("%d ",i);
			}
		}
		else if(i<100)
		{
			j=t%100;
			if(j==i)
			{
				printf("%d ",i);
			}
		}
		else
		{
			j=t%1000;
			if(j==i)
			{
				printf("%d ",i);
			}	
		}
	} 
	return 0;
}

        普通方法需要对同构数进行理解,如果是几位数那么这个数必然出现在这个数平方后几位,因此对于1位数,只需要对10取余即可,对于两位数,对100取余即可,对于三位数,对1000取余即可。如果取余得到的数和这个数相等,那么这个数就是同构数。

        这种方法比较简单,但是考试中有时候需要使用到递归的方法,我们还是需要掌握的,递归方法如下:(比较难理解,可以代入数据25进去理解)

#include<stdio.h>
int static sum2 = 0;
int total(int target,int count) {
	if (count > 0)
	{
		total(target / 10, count - 1);
		sum2 = sum2*10 + target % 10;
	}
	return sum2;
}
int main() {
	int i, j, k, count=0, sum;
	for (i = 2; i < 1000; i++)
	{
		k = i;     
		while (k > 0) //判断所找的数是一个几位数
		{
			count++;
			k = k / 10;
		}
		j = i * i;
		sum = 0;
		sum = total(j,count);
		if (sum == i)
		{
			printf("%d的平方是%d,%d是同构数!\n", i,j,i);
		}
		count = 0;
		sum2 = 0;
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_55848732/article/details/132173405