Ansi C:阶乘函数错了

时间:2013-05-06 12:27:45

标签: c ansi factorial

我写了一些代码来计算100的结果!但是我的功能在22之后停止给出正确答案!这是我的代码。作业是计算100!的数字之和,但我的代码在22之后给出错误的答案!

/*Calculates the factorial of a given number*/
double factorial(double num);

/*Calculates how many digits are in a number*/
int num_digits(double num);

int main (int argc, char *argv[]) {
  double ans = factorial(23);
  int num = num_digits(ans);

  printf("%lf\n", ans);
  printf("%d\n", num);
  char x[num];

  //convert the number returned by factorial() to a char array
  sprintf (x, "%lf", ans);

  int i = 0;
  int sum= 0;

  for (i = 0; i < num; i ++) {
    sum += x[i] - '0';
  }

  printf("--\n%d\n", sum);


  return 0;
}

double factorial(double num) {
  int i;
  double sum = 1;

  /*heel simpel, gwn 1 x sum, sum * sum - 1 enz..*/
  for (i = num; i > 0; i --) {
    sum *= i;
  }

  return sum;
}

1 个答案:

答案 0 :(得分:1)

22!约为10 ^ 21,约为2 ^ 63。这意味着,你可以计算22!在使用普通算术的64位机器上,但不是更多,因为那样你会得到整数溢出,结果是垃圾。您必须使用一个特殊的库来提供更大数字的算术。