用C语言实现计算大数的阶乘
在C语言中,double类型的数据虽然可以表示一个很大的数,但是由于尾数只占16位,所以其精确表示的位数只有16位,那么如何表示一个很大的数的阶乘值呢?
我们可以采用数组来表示该阶乘的结果,一个单元存储该结果的一位数(0-9),用C语言实现计算大数的阶乘的代码如下:
#include <stdio.h>
#include <stdlib.h>
#define SIZE 1000
int BigFact(int m, short data[]);
int main()
{
short data[SIZE] = { 0 }; //存储SIZE位数,表示SIZE位的大数,并且初始化为0
int i, j;
printf("请输入想要计算阶乘数的数值:");
scanf_s("%d", &i);
int x = BigFact(i, data); //计算阶乘i!,返回阶乘值的位数
if (x) //判断数组是否溢出,无溢出则打印阶乘值,否则打印溢出提示信息
{
printf("%d! = ", i);
for (j = x - 1; j >= 0; j--) //从最高位开始打印每一位阶乘值
printf("%d", data[j]);
printf("\n");
}
else
printf("数据太大,溢出!\n");
return 0;
}
/*****************************************************************************************/
/*功能描述:本函数用于实现计算自然数的阶乘值功能,目的是计算指定数的阶乘 */
/*入口参数:参数m,表示想要计算阶乘数的数值;数组data[],表示用于存储阶乘结果的数组*/
/*出口参数:数组data[],表示阶乘结果