0

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;
}
4

1 に答える 1

1

22!は約 10^21、つまり約 2^63 です。つまり、22 を計算できます。通常の算術演算を使用する 64 ビット マシンでは、整数オーバーフローが発生し、結果がガベージになるため、それ以上ではありません。より大きな数の算術演算を提供する特別なライブラリを使用する必要がありました。

于 2013-05-06T14:10:40.883 に答える