代码用途:
对较大的数据进行阶乘运算,如100等。
输入用例:
100
输出:
93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000
One Possible Answer:
#include <stdio.h>
int main(void)
{
int a[1000] = { 0 };
int i, k, j, len = 1, n, t;
scanf_s("%d", &n);
t = n;
a[0] = 1;
for (i = 0; i < n; ++i, --t)
{
for (j = len - 1; (j >= 0) && (t > 0); j--)
{
a[j] *= t;
}
for (k = 0; k <= len; k++)
{
if (a[k] >= 10)
{
a[k + 1] = a[k + 1] + a[k] / 10;
a[k] = a[k] % 10;
if (k + 1 == len) len++;
}
}
}
for (i = len - 1; i >= 0; i--)
{
printf("%d", a[i]);
}
return 0;
}
Another Possible Answer:
#include <stdio.h>
#define N 1000
int cal(int v[], int n)
{
int i, j, k, c, s;
v[N - 1] = 1;
s = N - 2;
for (i = n; i > 0; --i) {
c = 0;
for (j = N - 1; j > s; --j) {
k = v[j] * i + c;
c = k / 10;
v[j] = k % 10;
}
while (c) {
v[s--] = c % 10;
c /= 10;
}
}
return s;
}
int main(void)
{
int x, v[N], s, cnt;
printf("请输入数值:");
scanf_s("%d", &x);
s = cal(v, x);
printf("%10d ! = ", x);
for (int i = s + 1, cnt = 1; i < N; ++i, cnt++)
{
printf("%d", v[i]);
if (!(cnt % 15))
printf("\n ");
}
printf("\n");
return 0;
}