求同构数。
【问题描述】
设b是a的平方,若a与b的尾部相同,则称a是同构数。例如,25的平方是625,所以25是同构数。
编写程序满足如下要求:
输入两个整数m和n,找出m、n之间全部的同构数(包括m和n本身)。
【输入形式】
输入数据范围的下限m和上限n,要求m和n都为整数,m和n之间用一个空格分隔。
【输出形式】
按照由小到大的顺序输出所有同构数,每个整数占一行。若在该范围内没有同构数,则输出字符串No Answer。
循环计算每个数的平方数,判断数的长度,然后比较平方后的值的对应长度位数是否等于该数
#include <stdio.h>
int main()
{
int m,n,i,t,k,count=0;
scanf("%d%d",&m,&n);
for(i=m;i<=n;i++)
{
k = i*i;
t = i;
while(t>0)
{
if(t%10 != k%10)
break;
t = t/10;
k = k/10;
}
if(t==0)
{
printf("%d\n",i);
count++;
}
}
if(count==0)
printf("No Answer");
return 0;
}
//头文件
#include <stdio.h>
#include <stdlib.h>
//定义同构数判断函数
int tgs(int number)
{
//声明两个中间变量
int product, remainder;
//如果输入的值小于10则除10取余判断是否相等
if (number < 10)
{
product = number * number;
remainder = product % 10;
//如果是同构数返回1,否则返回0
if (number == remainder)
{
return 1;
}
else
{
return 0;
}
}
//如果输入的值小于100则除100取余判断是否相等
if (number < 100)
{
product = number * number;
remainder = product % 100;
//如果是同构数返回1,否则返回0
if (number == remainder)
{
return 1;
}
else
{
return 0;
}
}
}
//主函数
int main()
{
//声明接收用户输入的数据类型
int number;
printf("请输入需要判断的数:");
scanf("%d", &number);
//tgs(number)调用自定义函数
//打印判断返回值
printf("%d\n", tgs(number));
//程序暂停
system("pause");
//程序正常退出
return 0;
}
供参考:
#include <stdio.h>
int main()
{
int i, a, b, k, t, s, flg;
scanf("%d%d", &a, &b);
for (i = a, flg = 0; i <= b; i++)
{
t = i; k = i * i; s = 1;
while (t) { s *= 10; t /= 10; }
if ((k % s) == i){
printf("%d\n", i);
flg = 1;
}
}
if(!flg)
printf("No Answer");
return 0;
}