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

int main() {
    int count = 0;
    for (int i = 1; i <= 1000; i++) {
        int square = i * i;
        int num = i;
        int digits = 0;
        while (num > 0) {
            num /= 10;
            digits++;
        }
        int remainder = square % (int)pow(10, digits);
        if (remainder == i) {
            printf("%6d ", i);
            count++;
            if (count % 5 == 0) {
                printf("\n");
            }
        }
    }
    return 0;
}

解释每一行的含义:

  1. #include <stdio.h>:包含标准输入输出库的头文件,提供printf等函数。
  2. #include <math.h>:包含数学库的头文件,提供pow函数用于计算幂次方。
  3. int main():定义了主函数,程序从这里开始执行。
  4. int count = 0;:定义一个变量count,用于计数输出的自守数的个数。
  5. for (int i = 1; i <= 1000; i++):循环变量i从1到1000,遍历所有可能的自守数。
  6. int square = i * i;:计算i的平方,保存在变量square中。
  7. int num = i;:将i保存在变量num中,用于后面计算i的位数。
  8. int digits = 0;:定义变量digits,用于保存i的位数。
  9. while (num > 0):循环判断num是否大于0。
  10. num /= 10;:将num除以10,相当于去掉num的最后一位数。
  11. digits++;:每循环一次,digits加1,计算i的位数。
  12. int remainder = square % (int)pow(10, digits);:计算square除以10的digits次方的余数,保存在变量remainder中。
  13. if (remainder == i):判断remainder是否等于i,即判断i的平方的尾数是否等于i本身。
  14. printf("%6d ", i);:输出i的值,占6位。
  15. count++;:计数器count加1。
  16. if (count % 5 == 0):判断count是否是5的倍数,即每输出5个数后换行。
  17. return 0;:程序执行完毕,返回0表示成功。

本代码演示了如何用C语言判断自守数,并通过循环遍历、计算平方、求余数等操作来找出1~1000之间的所有自守数。

C语言实现自守数:代码解析及1~1000所有自守数

原文地址: https://www.cveoy.top/t/topic/njZ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录