我在寫一個簡單的程序,可以找到達到給定範圍的完美數字。下面是我有:在C中查找完美數字 - 編譯錯誤
#include<sys/types.h>
#include<sys/time.h>
#include<time.h>
#include<errno.h>
#include<fcntl.h>
#include<signal.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<strings.h>
#include<unistd.h>
void Compute(double range);
int main(int argc, char** argv[])
{
double range = 40000000;
printf("range: %f\n", range);
Compute(range);
}
void Compute(double range)
{
double numbers[range];
double total = 0;
double sum = 0;
double num;
double j;
for(num = 1; num < range; num++){
sum = 0;
for(j = 1; j < num; j++){
if((num % j) == 0){
sum+=j;
}
}
if(sum == num){
numbers[total] = sum;
total++;
}
}
printf("Total: %f\n", total);
for(j = 0; j < total; j++){
printf("%f \n", numbers[j]);
}
}
然而,當我試圖編譯程序時,我不斷收到error: expression must have integral type
誤差幾乎所有的操作在Compute()
方法。它適用於整數數據類型,但不適用於double
。我正在使用英特爾C編譯器。任何想法爲什麼編譯器抱怨?
我認爲這是一個較長代碼的修剪版本?否則,你會包含一堆你不需要的頭文件。 – dmckee
另一方面,這是檢查數字是否完美的一種相當低效的方法。忽視使檢查幾乎是瞬時的數論理論知識,可以停止在平方根處的除法,因爲如果'n = a * b'且'a!= b',則'a'和'b'中的較小者較少比平方根。 –