gpt4 book ai didi

c - 完美数、数组、验证和运算

转载 作者:太空狗 更新时间:2023-10-29 15:36:20 25 4
gpt4 key购买 nike

我正在尝试用 C 编写代码,允许在数组中最多输入 10 个元素(自然数),识别数组中的所有完美数字,并计算所有非完美数字的乘积。

Euclid proved that 2^{p−1}(2^p−1) is an even perfect number whenever 2^p−1 is prime (Euclid, Prop. IX.36). For example, the first four perfect numbers are generated by the formula 2^{p−1}(2^p−1), with p a prime number, as follows: for p = 2: 2^1(2^2−1) = 6 for p = 3: 2^2(2^3−1) = 28 for p = 5: 2^4(2^5−1) = 496 for p = 7: 2^6(2^7−1) = 8128. (source: wikipedia)

当我编译程序时,我得到了三次或多次重复的完全数声明。

例如:

... t[10] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 6}

'6' is a perfect number. '6' is a perfect number. '6' is a perfect number. ...

我也得到了一个奇怪的产品。

例如:

... t[10] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 28}

'28' is a perfect number. '28' is a perfect number. '28' is a perfect number. '28' is a perfect number. '28' is a perfect number. '28' is a perfect number. '28' is a perfect number. '28' is a perfect number. '28' is a perfect number. '28' is a perfect number. '28' is a perfect number. '28' is a perfect number. '28' is a perfect number. ... The product of the non-perfect numbers is -1677721600

我真的是 c 的新手,我似乎无法弄清楚我做错了什么,但我也不会讲义。非常感谢一些指导。

#include <stdio.h>
#define MAX_BOUND 9 /*Array's bound*/

main() {

int i, /*array index*/
t[i],
d, /*divider*/
sum, /*result for perfect number validation*/
product; /*product of all non-perfect number in array*/

i = 0;

printf("Enter your natural numbers. \n");

for (i = 0; i <= MAX_BOUND; i++) {
printf("Number %d : ", i + 1);
scanf( "%d", &t[i]);
}

i = 0;
product = 1;
for (i = 0; i <= MAX_BOUND; i++) {
d = 1;
sum = 0;
while(d < t[i]) {
if(t[i]%d == 0)
sum = sum + d;
d++;

if(sum == t[i])
printf("%d is a perfect number. \n", t[i]);
else
product = product * t[i];
}
}
printf("The product of the non-perfect numbers is %d \n", product);
getch();
}

最佳答案

“奇怪的产品”(例如负面)是由 integer overflow 引起的.你的产品是int,让它变大,例如long long

您应该将 for 循环与 i 一起使用,而不是 while。检查数字是否完美的代码应放在单独的函数 bool isPerfect(int number) 中。

你的意思是 sum = 0,而不是 somme = 0。声明 t[i] 也是错误的。

更正版本(使用 gcc -std=c99 file.c 编译):

#include <stdio.h>
#include <stdbool.h>
#define MAX 10

int t[MAX];

bool isPerfect(int number)
{
int sum = 0;
for (int d = 1; d < number; ++d) // optimization: you can iterate until sqrt(number)
{
if (number % d == 0)
{
sum += d;
}
}
return sum == number;
}

int main()
{
printf("Enter your natural numbers. \n");
for (int i = 0; i < MAX; ++i)
{
printf("Number %d: ", i + 1);
scanf("%d", &t[i]);
}
long long product = 1;
for (int i = 0; i < MAX; ++i)
{
if (isPerfect(t[i]))
{
printf("%d is a perfect number. \n", t[i]);
}
else
{
product = product * t[i];
}
}
printf("The product of the non-perfect numbers is %lld \n", product);
return 0;
}

关于c - 完美数、数组、验证和运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13670089/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com