|
あったかもしれませんが、思い出せません。
そんな時は新たに書けばいいのでは、ということで書いてみました。
ちょっと時間はかかりますが、10000 ! が求められるはずです。
#include <stdio.h>
#define N 10000
#define MAX 35700
int multiply(int *a, int n)
{
int i, c = 0;
for (i = 0; i < MAX; i++)
if (c = (a[i] = a[i] * n + c) >= 10)
c = a[i] / 10, a[i] %= 10;
return c;
}
void print(const int *a)
{
int i = MAX;
while (--i > 0 && a[i] == 0) ;
while (i >= 0) printf("%d", a[i--]);
}
int main(void)
{
static int a[MAX] = { 1 };
int i;
for (i = 2; i <= N; i++)
if (multiply(a, i)) break;
if (i <= N) puts(" overflow");
else printf(" %d! = ", N), print(a), puts("");
return 0;
}
|