2012-11-23 23 views
0

我在寫一個簡單的程序,可以找到達到給定範圍的完美數字。下面是我有:在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編譯器。任何想法爲什麼編譯器抱怨?

+0

我認爲這是一個較長代碼的修剪版本?否則,你會包含一堆你不需要的頭文件。 – dmckee

+0

另一方面,這是檢查數字是否完美的一種相當低效的方法。忽視使檢查幾乎是瞬時的數論理論知識,可以停止在平方根處的除法,因爲如果'n = a * b'且'a!= b',則'a'和'b'中的較小者較少比平方根。 –

回答

7

不能創建一個浮點大小

double numbers[range]; 

參數必須是整數數組。想象一下,如果range是2.5 - C將不允許2.5雙打數組。一個數組必須具有整數個元素

2

我不確定你知道什麼double的含義。

例如:你期望double numbers[1.23];能做什麼? (反問)

%運營商還需要整數操作數(可以使用fmod()拿到分數模,但我懷疑這是你想要的)。

+1

這不是一個正確的答案。你不應該發佈問題作爲答案 - 相反,你應該在評論中提出這個問題。 (我知道,你不能評論,atm。) – looper

+0

我以問題的形式寫了我的答案,因爲原始問題的答案是:「表達式必須有整型」正是編譯器抱怨的原因。 – melpomene

1

你的陣列:

double numbers[range]; 

需要對陣列整體尺寸。使用諸如。

double numbers[(int)range]; 

與雙變量的其他用法相同。