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

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;
    }
    
    // 计算 10 的 digits 次方
    long long divisor = pow(10, digits);
    
    // 判断是否为自守数
    return (square % divisor == n);
}

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

这段代码中,我们定义了一个 isAutomorphic 函数来判断一个数是否为自守数。在 main 函数中,我们获取用户输入,然后调用 isAutomorphic 函数进行判断,最后输出结果。
 

让我们详细解释一下 isAutomorphic 函数的实现:


使用这个程序,我们可以轻松地判断一个数是否为自守数。例如,我们可以尝试输入 25:

请输入一个正整数:25
25 是自守数。

再比如,我们输入一个非自守数 123:

请输入一个正整数:123
123 不是自守数。

通过这个程序,我们不仅实现了自守数的判断,还学习了如何处理整数的位数、如何使用 pow 函数进行幂运算,以及如何使用模运算来获取一个数的末尾几位。这些技巧在很多其他的编程问题中都会用到,是非常有用的基础知识。
 

此外,这个程序还展示了如何将一个复杂的问题分解成几个简单的步骤,然后逐步实现。这种解决问题的方法在编程中非常重要,可以帮助我们更好地组织代码,使程序更加清晰和易于理解。

相关文章