C语言高效查找自守数(无需计算平方)
C语言高效查找自守数(无需计算平方)
什么是自守数?
自守数是指其平方值的尾数等于该数自身的自然数。例如:
- 25 * 25 = 625- 76 * 76 = 5776- 9376 * 9376 = 87909376
以下C语言程序可以查找指定位数的自守数,并且程序优化了计算过程,不需要计算平方:c#include <stdio.h>#include <math.h>
// 判断一个数是否是自守数int isAutomorphic(int num) { int numDigits = log10(num) + 1; int lastDigits = num; int i; for (i = 0; i < numDigits; i++) { lastDigits = (lastDigits * num) % 10; } return lastDigits == num;}
// 找到指定位数的自守数void findAutomorphic(int n) { int start = pow(10, n-1); int end = pow(10, n);
for (int i = start; i < end; i++) { if (isAutomorphic(i)) { printf('%d\n', i); } }}
int main() { int n; printf('请输入自守数的位数:'); scanf('%d', &n); findAutomorphic(n); return 0;}
代码解释:
isAutomorphic(int num)函数: - 该函数用于判断一个数num是否为自守数。 - 没有直接计算平方,而是通过循环逐位计算乘积的最后几位数字,避免了大数计算,提高了效率。2.findAutomorphic(int n)函数: - 该函数用于查找指定位数n的自守数。 - 它遍历从10^(n-1)到10^n - 1的所有数字,并调用isAutomorphic函数判断每个数是否为自守数。3.main函数: - 提示用户输入自守数的位数。 - 调用findAutomorphic函数查找并输出结果。
优化说明:
该程序通过避免直接计算平方,而是逐位计算乘积的最后几位数字,有效地提高了程序的效率,尤其是在处理大数时。
原文地址: https://www.cveoy.top/t/topic/cuPw 著作权归作者所有。请勿转载和采集!