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

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

自守数是一个非常有趣的数学概念。它指的是一个数的平方的末尾几位数等于这个数本身。例如:

 

要用C语言编写一个程序来查找自守数,我们需要理解其中的逻辑。主要思路是遍历一定范围内的数字,对每个数字进行如下操作:计算其平方,然后检查平方的末尾是否与原数相同。这个过程涉及到一些数学运算和判断逻辑。
 

具体来说,我们可以通过以下步骤来实现:


下面是一个实现这个逻辑的C语言程序,它会找出并打印 1 到 10000 之间的所有自守数:

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

int isAutomorphic(int num) {
    long long square = (long long)num * num;
    int digit_count = 0;
    int temp = num;
    
    // 计算数字的位数
    while (temp != 0) {
        digit_count++;
        temp /= 10;
    }
    
    // 提取平方的末尾数字
    int divisor = pow(10, digit_count);
    int last_digits = square % divisor;
    
    // 判断是否为自守数
    return (last_digits == num);
}

int main() {
    printf("1 到 10000 之间的自守数有:\n");
    for (int i = 1; i <= 10000; i++) {
        if (isAutomorphic(i)) {
            printf("%d ", i);
        }
    }
    printf("\n");
    return 0;
}

这段代码中,我们定义了一个 isAutomorphic 函数来判断一个数是否为自守数。在 main 函数中,我们遍历 1 到 10000 之间的所有数字,对每个数字调用 isAutomorphic 函数进行判断,如果是自守数就将其打印出来。
 

在 isAutomorphic 函数中,我们首先计算给定数字的平方。然后,我们计算原数字的位数,这个信息用于确定需要从平方结果中提取多少位数字。接着,我们使用模运算符%和 pow 函数来提取平方结果的末尾相应位数。最后,我们比较提取出的末尾数字与原数字是否相等,如果相等则返回 1(表示是自守数),否则返回 0。
 

运行这段代码,你将看到如下输出:

1 到 10000 之间的自守数有:
1 5 6 25 76 376 625 9376

这个程序展示了如何将数学概念转化为编程逻辑,并使用C语言的基本语法和数学函数来实现。通过这个例子,我们不仅学习了自守数的概念,还练习了循环、条件判断、函数定义和调用等C语言的基本技能。对于初学者来说,这是一个很好的练习,可以帮助理解如何将数学问题转化为编程解决方案。

相关文章