小言_互联网的博客

C语言之计算大数阶乘,如计算100!和1000!等~~~

352人阅读  评论(0)

一个正整数的阶乘(英语:factorial)是所有小于及等于该数的正整数的积,并且定义0的阶乘为1。自然数n的阶乘写作n!。即n!=1×2×3×…×n。阶乘亦可以递归方式定义:0!=1,n!=(n-1)!×n。

下面直接上源码,如计算1000!:


  
  1. #include <stdio.h>
  2. // result数组的最大长度
  3. #define MAX_LEN 4096
  4. // result数组,存放阶乘结果
  5. int result[MAX_LEN];
  6. // result数组的有效长度
  7. int len = 0;
  8. // factorial函数的功能是计算阶乘,结果存在result数组中
  9. // 返回值:成功为0,失败为1
  10. int factorial(int n)
  11. {
  12. int value = 0;
  13. // 初始化result数组及有效长度长度
  14. result[ 0] = 1;
  15. len = 1;
  16. for( int i= 1; i<=n; i++)
  17. {
  18. for( int j=len -1; j>= 0; j--)
  19. {
  20. value = i * result[j];
  21. result[j] = value % 10;
  22. value = value / 10;
  23. int k = j + 1;
  24. // 考虑进位,不增加result数组长度的情况
  25. while(value > 0 && k < len)
  26. {
  27. value = value + result[k];
  28. result[k] = value % 10;
  29. value = value / 10;
  30. k++;
  31. }
  32. // 考虑进位,增加result数组长度的情况
  33. while(value > 0)
  34. {
  35. result[len] = value % 10;
  36. value = value / 10;
  37. len++;
  38. if(len > MAX_LEN)
  39. {
  40. return 1;
  41. }
  42. }
  43. }
  44. }
  45. return 0;
  46. }
  47. int main(void)
  48. {
  49. for( int i= 0; i<= 1000; i++)
  50. {
  51. // 计算阶乘
  52. int ret = factorial(i);
  53. // 计算失败
  54. if(ret == 1)
  55. {
  56. printf( "Error! Tooooooo long!!\n");
  57. break;
  58. }
  59. // 打印阶乘结果
  60. printf( "%d! = ", i);
  61. for( int j=len -1; j>= 0; j--)
  62. printf( "%d", result[j]);
  63. printf( "\n");
  64. }
  65. return 0;
  66. }

来源:http://www.xieyincai.com/20180921703.html


转载:https://blog.csdn.net/ctrigger/article/details/105147502
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场