我想在C中編寫一個代碼,它允許在數組中最多輸入10個元素(自然數),標識數組中的所有完美數字,並執行該產品所有非完美數字。完美的數字,數組,驗證和操作
歐幾里得證明,2^{-1 P}(2^P-1)爲偶數完全數每當2^P-1 爲素數(歐幾里得,螺旋槳。IX.36)。例如,前四個完美的 數字由公式2^{p-1}(2^p-1)生成,其中pa素數爲 ,如下所示:對於p = 2:2^1(2^2 -1)= 6:對於p = 5:2^4(2^5-1)= 496對於p = 7:2^2(2^3-1)= 28^7-1)= 8128. (來源:Wikipedia)
當我編譯該程序,得到了一個一式三份或完美數聲明的更高的重複。
例如:
... T [10] = {1,1,1,1,1,1,1,1,1,6}
'6' 是一個完美的數字。 '6'是一個完美的數字。 '6'是一個完美的數字。 ...
我也得到一個奇怪的產品。
例如:
... T [10] = {1,1,1,1,1,1,1,1,1,28}
'28' 是一個完美的數字。 '28'是一個完美的數字。 '28'是一個完美的數字。 '28'是一個完美的數字。 '28'是一個完美的數字。 '28'是一個完美的數字。 '28'是一個完美的數字。 '28'是一個完美的數字。 '28'是一個完美的數字。 '28'是一個完美的數字。 '28'是一個完美的數字。 「28」是一個完美的數字。 '28'是一個完美的數字。 ... 非完美數的乘積爲-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();
}
所以我的錯誤是我的循環集成。謝謝你,你是對的! –