算法系列—模拟手算,计算阶乘

计算阶乘,模拟手算,分组输出。

#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");
}

猜你喜欢

转载自blog.csdn.net/u010383605/article/details/71909046
今日推荐