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

例如5是同构数,因为5是25右边的数,在主函数中调用该函数打印输出1到100间的同构数下面是我编的程序,结果应该是1,5,6,25,76,可是却多了几个不对的数,我哪里出... 例如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");}
出错的结果:
展开
 我来答
兔老大米奇
高粉答主

2019-12-20 · 醉心答题,欢迎关注
知道小有建树答主
回答量:988
采纳率:100%
帮助的人:15万
展开全部

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

kaixingui2012
推荐于2017-10-02 · TA获得超过4.2万个赞
知道大有可为答主
回答量:1.4万
采纳率:81%
帮助的人:6401万
展开全部

#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");
}
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hhit315
2015-01-04 · 超过13用户采纳过TA的回答
知道答主
回答量:32
采纳率:0%
帮助的人:20.4万
展开全部

#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,也就是中间有一大片空白

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式