计算阶乘,模拟手算,分组输出。
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
int arr[1000];
void fun(int n)
{
int i, j, k, temp, count = 0;
for (i = 1; i <= n; i++)
{
for (j = 0; j <= count; j++)
{
arr[j] *= i;
}
for (k = 0; k < j; k++)
{
if (arr[k] > 10000)
{
temp = arr[k] / 10000;
arr[k] = arr[k] % 10000;
arr[k + 1] += temp;
if (k + 1 == j)count = j;
}
}
}
printf("%d! = ", n);
if (arr[count] > 0)printf("%d ", arr[count]);
for (i = count - 1; i >= 0; i--)
{
printf("%04d ", arr[i]);
}
printf("\n");
}
void main(void)
{
// test
int test_data[] = { 1,2,3,4,5,6,7,8,9,10,30,40,50,500,1000 };
for (int i = 0; i < sizeof(test_data) / sizeof(int); ++i)
{
memset(arr, 0, sizeof(arr));
arr[0] = 1;
fun(test_data[i]);
}
system("pause");
}