c语言:编写函数判断x是否同构数

例如5是同构数,因为5是25右边的数,在主函数中调用该函数打印输出1到100间的同构数
下面是我编的程序,结果应该是1,5,6,25,76,可是却多了几个不对的数,我哪里出错了?
#include"stdio.h"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;}void main(){ int i; printf("1~100之间的同构数有:\n"); for(i=1;i<100;i++) { if(isomorphism(i)==1) printf("%4d",i);

} printf("\n");}
出错的结果:

#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 与右端数 是否相等,相等即为同构数。

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-10-02

#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");
}

追问

如果一行输出两个,改动的程序如下(只打出了要加上的,其他不变):

 int count=0;
 for(i=1;i<100;i++)
 {
  if(isomorphism(i)==1)
  {
   printf("%4d",i);
   count++;
  }
  if(count%2==0)
    printf("%d\n",count);
 }
结果:

下面还有一个76,也就是中间有一大片空白

追答

int count=0;
for(i=1;i<100;i++)
{
if(isomorphism(i)==1)
{
printf("%4d",i);
count++;
if(count%2==0)
printf("\n");
}
}

本回答被提问者采纳
第2个回答  2015-01-04

#include <stdio.h>


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

追问

如果一行输出两个,改动的程序如下(只打出了要加上的,其他不变):

 int count=0;
 for(i=1;i<100;i++)
 {
  if(isomorphism(i)==1)
  {
   printf("%4d",i);
   count++;
  }
  if(count%2==0)
    printf("%d\n",count);
 }
结果:

下面还有一个76,也就是中间有一大片空白

相似回答