在C编译错误中寻找完全数

在C编译错误中寻找完全数,c,compiler-errors,double,C,Compiler Errors,Double,我正在写一个简单的程序,找到给定范围内的完美数。以下是我所拥有的: #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<stri

我正在写一个简单的程序,找到给定范围内的完美数。以下是我所拥有的:

#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]);
  }

}

然而,当我试图编译程序时,我不断地得到错误:对于计算方法中的几乎所有操作,表达式都必须具有整型错误。它适用于整数数据类型,但不适用于double。我正在使用英特尔C编译器。你知道编译器为什么抱怨吗?

你不能创建一个浮点大小的数组

double numbers[range];

参数必须是整数。想象一下,如果范围是2.5-C,则不允许2.5倍的数组。数组必须有整数个元素

我不确定您是否知道double是什么意思

例如:您希望双精度数字[1.23]是什么;怎么办?反问句

%运算符还需要整数操作数。您可以使用fmod获得分数模,但我怀疑这是您想要的。

您的数组:

double numbers[range];
需要阵列的整数大小。使用石膏,例如

double numbers[(int)range];

与双变量的其他用法相同。

我认为这是一个较长代码的精简版本?另一方面,这是一种检查数字是否完美的低效方法。忽略使检查几乎是瞬时的数论知识,您可以在平方根处停止除法,因为如果n=a*b和a!=b、 a和b中的较小者小于平方根。这不是正确答案。你不应该将问题作为答案发布——相反,你应该在评论中提出这个问题。我知道,你不能评论,atm。我以问题的形式写下了我的答案,因为最初的问题是以答案的形式写的:表达式必须有整数类型正是编译器抱怨的原因。