小小wu~ 发表于 2023-12-14 15:10:09

正整数n若是它平方数的尾部,则称n为同构数。

题目描述
正整数n若是它平方数的尾部,则称n为同构数。

例如5是25右边的数,25是625右边的数,5和25都是同构数。

输入描述
多组数据输入,每一组输入正整数n。

输出描述
输出1到正整数n之间全部同构数,从小到大依次排列,一行一个数。


求求这个代码为啥不对啊
#include <stdio.h>
int f(int n)
{
    int s=n*n;
    int a=s%10;
    return a==n%10;
}
int main()
{
    int n;
    while(scanf("%d",&n)!=EOF)
    {
       for(int i=1;i<=n;i++)
       {
         if(f(i))
               printf("%d\n",i);
       }
    }
}

FishC 发表于 2023-12-14 15:11:34

你好,这是因为你的代码只判断了最后一位数是否相等,而同构数的定义是平方数的尾部和原数的尾部要完全一致。所以你需要对数字进行逐位比较。

以下是修改后的代码:

#include <stdio.h>

int isIsomorphy(int n) {
    int sq = n * n;
    while (n > 0) {
      if (n % 10 != sq % 10) {
            return 0;
      }
      n /= 10;
      sq /= 10;
    }
    return 1;
}

int main() {
    int n;
    while (scanf("%d", &n) != EOF) {
      for (int i = 1; i <= n; i++) {
            if (isIsomorphy(i)) {
                printf("%d\n", i);
            }
      }
    }
    return 0;
}

这个代码中,`isIsomorphy`函数用于判断一个数是否是同构数。它首先计算出该数的平方数`sq`,然后通过对比原数和平方数的每一位来判断它们是否一致。如果有任意一位不一致,则返回0表示不是同构数;否则,返回1表示为同构数。

在`main`函数中,我们通过循环输入多组测试数据,并依次判断每个数是否为同构数,如果满足条件则输出。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

小小wu~ 发表于 2023-12-14 15:22:00

FishC 发表于 2023-12-14 15:11
你好,这是因为你的代码只判断了最后一位数是否相等,而同构数的定义是平方数的尾部和原数的尾部要完全一致 ...

谢谢你啊

FishC 发表于 2023-12-14 15:22:10

小小wu~ 发表于 2023-12-14 15:22
谢谢你啊

不客气,希望能帮到你!如果还有其他问题,随时提问哦!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 正整数n若是它平方数的尾部,则称n为同构数。