c - 找出一个数字是否完美的程序
问题描述
我在尝试运行这个程序时遇到了麻烦,这个程序是我用来查找一个数字是否完美的。它给了我一个分割错误。这意味着什么?你能帮我理解我做错了什么吗?这是我的代码:
#include <stdio.h>
void perfect(int number);
int main() {
int n;
printf("Insert a number greater than 0: ");
scanf("%d", &n);
perfect(n);
return 0;
}
void perfect(int number) {
int i, j, array[100], k = 0, tmp = 0, tmp2 = number;
for (i = 2; i <= 1000; i++) {
for (j = 2; j <= 1000; j++) {
if (i % j == 0) {
array[k] = i;
k++;
}
}
}
k = 0;
while (tmp2 != 1) {
if (tmp2 % array[k] == 0) {
tmp += array[k];
tmp2 /= array[k];
}
k++;
}
tmp++;
if (tmp == tmp2) {
printf("It's a perfect number\n");
}
}
解决方案
分段错误告诉您您正在尝试访问超出允许范围的内存。您的数组远不足以满足您的程序的功能。
您需要重新考虑存储在数组中的内容。不超过一千的所有数字都可以被其他数字整除,对吧?但实际上它会是
- 所有这些和
- 所有偶数和
- 所有能被 3 整除的和
- 所有这些都可以被 4 整除,等等。
这听起来比 100 多很多,不是吗?还会有很多很多重复,我怀疑你打算这样做。例如,您将存储 6 三倍,因为它可以被 2、3 和自身整除。(所以,顺便说一下,一旦 j 大于 i,你就应该停止查找。)
您的 while 循环也很奇特。它在 tmp2 为 1 时终止。tmp 怎么会等于 1?
回到绘图板,我害怕!
推荐阅读
- javascript - 在 Javascript 中使用实例 - @class、@param、@property、@augments
- ruby - 在 Jenkins 中从多个功能目录运行 Cucumber (WATIR) 测试
- typescript - 泛型函数子类型约束错误和混淆
- javascript - 如何在 angularjs 中使用 $q.all(promises)
- pythonanywhere - PythonAnywhere – 如何使用我安装的模块?
- reactjs - 如何将此子组件包装在高阶组件中?
- javascript - 如何使用 splice 和 slice 将一个数组放入另一个数组
- html - HTML5视频源是否有可能有#
- json - 没有使用正则表达式作为值创建有效的 json
- clojure - 使用 Datomic 返回 Map 而不是 Vector 时出错