用C语言实现计算大数的阶乘
2019-08-12 14:30
211 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_43459369/article/details/99300961
用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[],表示阶乘结果 */ /*返回值:返回0或x,当返回0时表示结果溢出,当返回其他数值时表示阶乘值的位数*/ /******************************************************************************************/ int BigFact(int m, short data[]) { int i, j, k; data[0] = 1; //初始化阶乘值 int x = 1; //初始化阶乘值的位数 if (m) { for (i = 1; i <= m; i++) //累乘计算阶乘m! { //乘法阶段 for (j = 0; j < x; j++) data[j] = data[j] * i; //进位阶段 for (k = 0; k < x; k++) { if (data[k] >= 10) { data[k + 1] = data[k + 1] + data[k] / 10; data[k] = data[k] % 10; //如果最高位发生进位,则增加阶乘结果位数,同时判断是否溢出 if (k == x - 1) { x++; //最高位有进位时,将位数x加1 if (x > SIZE) return 0; //数据溢出,结束计算并返回0 break; //到最高位结束进位 } } } } } return x; }
相关文章推荐
- 大数的阶乘(C语言实现)
- 大数运算之100的阶乘(C语言实现)
- C语言实现大数阶乘
- C语言实现大数阶乘
- C语言中如何实现大数计算
- c语言大数阶乘和计算阶乘末尾的0的个数
- C语言实现求大数阶乘
- 常见C语言面试题之八:数组实现大数阶乘
- C语言小程序实现递归计算阶乘!
- asp利用数组实现阶乘计算(大数相乘)
- linux下c语言实现计算磁盘剩余空间
- 用C语言编写函数,实现strlen计算字符串长度的功能
- 大数阶乘Java实现
- c语言递归实现100的阶乘
- C语言实现括号匹配,中缀表达式转后缀表达式并计算具体代码实现
- C 语言利用数组实现大数计算
- 大数乘法计算Java代码实现
- 用C语言实现布丰投针计算圆周率问题
- CCF认证 - 201509-2 - 日期计算 C语言代码实现(100分)
- 大数阶乘算法思想,具体实现网上很多,也顺便找了个算法思想