编写程序,找出1~99之间的全部同构数。若一个数出现在它的平方数的右边则称它是同构数。例如:若5^2=25,则5是一个同构数。再如,若25^2=625,则25是一个同构数。
输入格式: 无
输出格式: "m=%3d\t\tm*m=%6d\n"
//判断整数的位数:返回值为整数位数
int digit(int n)
{
if (n < 0)
n = -n;
int i = 0;
while (n > 0)
{
n = n / 10;//每次减少一位数
i++;
}
return i;
}
//判断是否有同构:思路是用平方数都10的n次方进行取余数,n的取值是从1-n,这样就可以得到各个位数上的数了,例如625%10=5,对100取余25,对1000取余是625
int fun(int a, int i, int n)
{
int temp1 = 10;
int temp2;
for (int j=1; j <= n; j++)
{
temp2 = a%temp1;
if (temp2 == i)
{
return 1;返回1则找到
}
temp1 = 10 * temp1;
}
return 0;//如果返回0,则没找到
}
int main()
{
int a = 0;//a存放整数平方
int i = 0;
for (i=1; i < 100; i++)
{
a = i*i;
int n = digit(a);//找到整数的位数
int end = fun(a, i, n);//判断是否同构
if (end == 1)//满足条件,则同构
{
printf("m=%3d\t\tm*m=%6d\n", i, a);
}
}
return 0;
}