c语言 - 用于判断数字是否"Perfect Number"的代码



这是我用C写的代码,用于查找给定的数字是否是完全数。

完全数是它所有因数的和。

示例- 6

6有因数2,3和1(1是因为它能被自己整除)2 + 3 + 1 = 6

#include <stdio.h>
int main(){
int number;
int sum =0,i;
scanf("%d",&number);
for(i=0;i<number;i++){

if(number % i==0){
sum += i;
}else{ sum = sum;}
}if(sum==number){
printf("Perfect Number");
}else{
printf("Not a Perfect Number");
}
return 0;
}

代码在逻辑上是正确的,它应该给出正确的输出,但问题是它没有给出任何输出。

在lion中,它以代码"进程结束,退出代码-1073741676 (0xC0000094)">

您的循环必须有i1开始,而不是0,否则当您执行number % i == 0时将被除零:

#include <stdio.h>
int main(void) {
int number;
int sum = 0;
printf("Insert number: ");
scanf("%d", &number);
// NOTE: replaced condition `i < number` with `i <= number / 2`
//   for improved performance
for (int i = 1; i <= number / 2; i++) {
if (number % i == 0) {
sum += i;
}
}
if (sum == number) {
printf("Perfect Numbern");
}
else {
printf("Not a Perfect Numbern");
}
return 0;
}

这里是一个圈复杂度为2的解。我看不出有什么理由,但是你可以这样做。

#include <stdio.h>

int main(void)
{
int number = 33550336;
int sum = 0;

for(int i = 1; i <= number / 2; i++) {
sum += i * (number % i == 0);
}

printf("%d is %s", number, "not a perfect number." + 4 * (sum==number));

return 0;
}

函数版本:

#include <stdio.h>
#include <stdbool.h>
bool is_perfect(int number)
{
int sum = 0;
for(int i = 1; i <= number / 2; i++) {
sum += i * (number % i == 0);
}
return sum == number;
}

int main(void)
{
int n = 33550336;
printf("%d is %s", n, "not a perfect number." + 4 * is_perfect(n));

return 0;
}

最好的版本是这个圈复杂度为1:

bool is_perfect(int n)
{
return n == 6 || n == 28 || n == 496 || n == 8128 || n == 33550336;
}

快得多!😅

相关内容

  • 没有找到相关文章