//同构数,输出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;
}