#include "stdio.h"
int main(int argc,char *argv[]){
int n;
for(n=0;n<100;n++)
if(n*n%(n<10 ? 10 : 100)==n)//判断:n*n的值0~9除以10,10~99除以100,然后与n比较是否相等
printf("%d ",n);
printf("\n");
return 0;
}
运行结果:
分析:
首先同构数的定义;一个n位正整数等于它的平方的最低n位数。
例如:
1位数5的平方等于25,而25的最后1位数就是5;
2位数25的平方等于625,而625的最后2位数就是25;
1也是同构数。
分析:
小于10的数字,是1位数,所以需要求出:它的平方数除以10的余数。因为任何整数除以10得到的余数是1位数。
例如:
自然数 平方 除以10的余数
1 1 1%10 = 1
2 4 4%10 = 4
3 9 9%10 = 9
4 16 16%10 = 6
5 5 25%10 = 5
10-99之间的数,是两位数,所以需要求出:它的平方数除以100的余数。因为任何整数除以100得到的余数是2位数。
例如:
自然数 平方 除以10的余数
10 100 100%100 = 0
11 121 121%100 = 21
12 144 144%100 = 44
......
25 625 625%100 = 25
代码如下:
#include "stdio.h"
main()
{
int n,k;
/*输入一个0-99的数*/
scanf("%d",&n);
if(n<10)
k=10; /*n<10,k为10*/
else
k=100; /*n>=10,k为100*/
if((n*n%k)==n) /* n*n%k 将n平方以后求除以k的余数*/
/*如果n的平方除以k的余数等于n,就是同构数*/
printf("是同构数\n");
else
/*如果n的平方除以k的余数不等于n,就不是同构数*/
printf("不是同构数\n");
}
#include
void main( void)
{
int i = 0, j = 0;
while( 1) //无限循环,运行程序后可以不断地进行输入和判断
{
printf("输入一个介于0~99的整数。\n"); //输入提示
scanf("%d", &i); //输入读取
j = i * i; //计算输入数i的平方
if( i < 10) //10以内的数
{
if( (j%10) == i) //判断i^2的个位数是否与i相等
{
printf("%d是同构数。\n", i); //若相等则为同构数
}
else
{
pirntf("%d不是同构数。\n", i); //若不相等则不为同构数
}
}
if( i >= 10) //10和10以上的数
{
if( (j%100) == i)
printf("%d是同构数。\n", i);
else
printf("%d不是同构数。\n", i);
}
}
}//第一次答这种题目,这个文本编辑真的是蛋疼
思路:同构数是会出现在它的平方的右边的数。具体见代码:
#include
int main()
{
int n,i,m;
for(i=1;i<100;i++){//依次从1到100遍历判断
n=i*i;//求i的平方
if(i<10) m=n%10;//求平方数的后几位
else m=n%100;
if(i==m) printf("%d\n",i); //判断是否是同构数
}
return 0;
}
/*
运行结果:
1
5
6
25
76
*/
你的要求怪高的。同构数是会出现在它的平方的右边的数。
#include
main()
{
long i,j,k;
/* 读取数字*/
i=scanf (\"%d\",&a[i]);
j=i*i;
char name[]="是同构数";
if(j%10==i){
printf (\"%d \",i);
printf("%s\n",name);
}
}
}