首页 > 编程知识 正文

raptor递归法求n的阶乘,n的阶乘怎么算

时间:2023-05-05 23:16:14 阅读:118061 作者:300

问题描述:

输入正整数n,输出n! 请参阅。

其中n!=1*2*3*…*n。

算法 1 —递归

长时间结构(长时间n ) if ) n==0)返回1; 返回工厂(n-1 ) *n; }void Test1 () printf('%lldn ',Factorial(1) )1); printf('%lld(n )、factorial ) ) 10 ); printf('%lld(n )、factorial ) ) 100 ); printf('%lld(n )、factorial ) ) 1000 ); printf('%lld(n )、factorial ) ) 10000 ); } 算法2——循环

长龙工厂1 (长龙n ) {长龙I=1,sum=1; while(I=n ) { sum*=i; I; } return sum; }void Test2() printf('%lldn ',Factorial(1) )1); printf('%lld(n )、factorial ) ) 10 ); printf('%lld(n )、factorial ) ) 100 ); printf('%lld(n )、factorial ) ) 1000 ); } 算法3——高精度算法

#definemax1000voidmul(intn ) { int i=0,j=0; int s; //积int c=0; //进位//大整数a int arr[MAX]={0}; arr[0]=1; for(I=2; i=n; I ) for(j=0; jMAX; j () { s=arr[j]*i c; arr[j]=s; c=s/10; //进位}}for(I=max-1; i=0; (I ) ) /遇到的不是0,而是if(arr ) I ) ) break; (for ) j=I; j=0; j--; {//printf(%d ),按相反顺序输出arr [ j ] } printf ((n ); }void Test () mul ) ) 1; mul(10; mul(100; } 算法3思路:

n! 高精度算法:使用一个数组arr来表示一个大整数A,arr[0]表示A的个位,arr[1]表示A的十位,依次类推。,因为算法1和算法2都存在溢出现象。

将a中的数k乘以a变换后的各位乘以k,处理对应的位数

n的阶乘为1 *2*3*………………* n,因此数组的第一项必须初始化为1,其馀的必须初始化为0 (

结果:

算法一:

算法二:

算法三:

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。