#include
inttgs(intx)
{
intm1,n,a,b;
m1=x;
n=x*m1;
while(m1)
{
a=m1%10;
b=n%10;
if(a!=b)break;
m1=m1/10;
n=n/10;
}
returnm1==0;
}
intmain()
{
intx;
scanf("%d", &x);
if(tgs(x))printf("%d是一个同构数",x);
elseprintf("%d不是一个同构数",x);
return0;
}。
扩展资料
C语言 同构数的算法
“同构数”是指这样的整数:它恰好出现在其平方数的右端。
如:376*376=141376。请输出10000以内的全部“同构数”。
算法分析:
1.求出1-10000之间每个数的位数(即这个数是几位数)。设这个数是i.//用for循环实现。
2.再求出每个数的平方值,提取出最右端对应位数的数值出来。//用取模%法实现。
如369是个三个数,它的平方是136161,用取模%法提取出最右三位数字161,即136161%1000=161。
3.最后判断 i 与右端数 是否相等,相等即为同构数。
#include"stdio.h"
int isomorphism(int i)
{
int mod;
if ( i<10 )
mod=10;
else
mod=100;
if ( i == i*i%mod )
return 1;
return 0; //不是,则要明确返回0
}
void main()
{
int i;
printf("1~100之间的同构数有:\n");
for(i=1;i<100;i++)
{
if(isomorphism(i)==1)
printf("%4d",i);
}
printf("\n");
}
#include
int isomorphism(int i)
{
if(i>=1 && i<=9 && i==(i*i)%10)
return 1;
if(i>=10 && i<=100 && i==(i*i)%100)
return 1;
return 0; // 缺少此句
}
void main()
{
int i;
printf("1~100之间的同构数有:\n");
for(i=1;i<100;i++) {
if(isomorphism(i)==1)
printf("%4d",i);
}
printf("\n");
}
编译执行:
$ gcc test.c -o test
$ ./test.exe
1~100之间的同构数有:
1 5 6 25 76