首页 > 编程笔记 > C语言笔记

判断自守数的C语言代码(附带解析)

自守数是一个非常有趣的数学概念,它指的是一个数的平方的末尾几位数等于这个数本身。换句话说,如果一个数的平方的尾数与这个数相同,那么这个数就是自守数。


举几个例子来说明:

现在我们理解了自守数的概念,让我们来探讨如何用C语言判断一个数是否为自守数。判断自守数的基本思路是:首先计算给定数字的平方,然后比较这个平方数的末尾几位是否与原数相等。


具体的实现逻辑如下:


下面是实现这个逻辑的C语言代码:

#include <stdio.h>
#include <math.h>

int isAutomorphic(int n) {
    long long square = (long long)n * n;
    int digits = 0;
    int temp = n;
    
    // 计算 n 的位数
    while (temp != 0) {
        digits++;
        temp /= 10;
    }
    
    // 取 square 的末尾 digits 位
    long long last_digits = square % (long long)pow(10, digits);
    
    // 比较末尾数字是否等于 n
    return (last_digits == n);
}

int main() {
    int num;
    printf("请输入一个数字:");
    scanf("%d", &num);
    
    if (isAutomorphic(num)) {
        printf("%d 是自守数\n", num);
    } else {
        printf("%d 不是自守数\n", num);
    }
    
    return 0;
}

让我们来详细解释一下这段代码:


我们定义了一个函数 isAutomorphic,它接受一个整数参数 n,并返回一个布尔值,表示 n 是否为自守数。在这个函数中,我们首先计算 n 的平方,存储在 square 变量中。

注意,我们使用 long long 类型来存储 square,以防止在处理较大的数时发生整数溢出。

接下来,我们计算 n 的位数。我们使用一个 while 循环,不断地将 n 除以 10,直到 n 变为 0,每次循环计数器 digits 加 1。这样,当循环结束时,digits 就存储了 n 的位数。
 

然后,我们使用 pow 函数(在 math.h 库中定义)计算 10 的 digits 次方,并用它对 square 进行取模运算。这个操作可以得到 square 的末尾 digits 位数字。
 

最后,我们比较得到的末尾数字是否等于原始的 n。如果相等,函数返回 1(真),表示 n 是自守数;否则返回 0(假),表示 n 不是自守数。
 

在 main 函数中,我们从用户那里获取输入,调用 isAutomorphic 函数进行判断,然后打印结果。
 

让我们看一下这段代码的运行结果:

请输入一个数字:25
25 是自守数

请输入一个数字:7
7 不是自守数

这个程序可以正确判断输入的数字是否为自守数。需要注意的是,由于我们使用了 int 类型来存储输入的数字,所以这个程序只能处理在 int 范围内的自守数。如果要处理更大的数字,需要修改数据类型和相应的计算逻辑。
 

通过学习判断自守数的过程,我们不仅理解了一个有趣的数学概念,还练习了C语言中的基本运算、循环、条件判断等知识点。这个例子展示了如何将数学概念转化为编程逻辑,是数学和编程结合的一个很好的实例。

相关文章