0

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

#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 编译器。任何想法为什么编译器抱怨?

4

3 回答 3

7

您不能创建具有浮点大小的数组

double numbers[range];

参数必须是整数。想象一下如果range是 2.5 - C 将不允许 2.5 双打的数组。数组必须有整数个元素

于 2012-11-23T23:10:55.843 回答
3

我不确定你知道什么double意思。

例如:您究竟希望double numbers[1.23];做什么?(反问)

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

于 2012-11-23T23:13:20.403 回答
1

你的数组:

double numbers[range];

需要数组的整数大小。使用演员表,例如。

double numbers[(int)range];

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

于 2012-11-23T23:13:23.703 回答