我在这里是一个新的程序员。我正在尝试编写一个程序,打印1-10,000范围内的完美数字,并列出所有可被完美数字整除的数字。我得到了一个预设的代码,底部是我现在拥有的。我做错了什么(禁止任何语法)?
#include <stdio.h>
int perfect(int);
void list_perfect(int);
int main() {
int i;
for (i=2; i<10000; i++) {
if (perfect(i)) {
list_perfect(i);
}
return 0;
}
int perfect(int number) {
}
void list_perfect(int number) {
}
当前代码:
#include <stdio.h>
int perfect(int);
void list_perfect(int);
int main() {
int i;
for (i=2; i<10000; i++) {
if (perfect(i)) {
printf("These are the perfect numbers:\n");
list_perfect(i);
}
}
return 0;
}
int perfect(int number) {
int sum;
int k;
sum = 0;
for (k=2; k<number; k++) {
if(number%k==0) {
sum += k;
}
}
if(sum == number)
return sum;
else
return 0;
}
}
void list_perfect(int number) {
if(perfect(number)) {
printf("%d", number);
}
}
答案 0 :(得分:1)
完美数字等于其适当除数的总和。例如,6是一个完整数,并且等于整数1 + 2 + 3 = 6.因为1是所有正整数的公约数(也是负数),我建议你把sum = 1;在你的int完美(int数字)函数里面不是sum = 0开始的,因为你开始你的for循环2.我猜这是你的问题。请进行更改,看看您的代码是否有效。谢谢。索利曼。
答案 1 :(得分:0)
主要问题是这一行:
for (k=2; k<number; k++) {
你需要从1开始,所以它应该是
for (k=1; k<number; k++) {
为了获得更好的表现,您可以这样做:
for (k=1; k <= number/2; k++) {
除此之外,你不应该两次调用perfect
函数。所以改变这个:
void list_perfect(int number) {
if(perfect(number)) {
printf("%d", number);
}
}
只是打印:
void list_perfect(int number) {
printf("%d ", number);
}
同样更正:
if(sum == number)
return sum;
else
return 0;
} <-------------------- Delete this line