求阶乘的方法
1.普通求法
#include<iostream> using namespace std; int main(){ int sum=1; int n; cin>>n; for(int i=1;i<=n;i++){ sum=sum*i; } cout<<sum; return 0; }
2.递归法
#include<iostream> using namespace std; int fact(int n){//定义阶乘函数 if(n==1) return 1;//输入的参数是1,直接返回1 else return n*fact(n-1);//递归算法 } int main(){ int x; cin>>x; x = fact(x);//调用函数返回int值 cout<<x; return 0; }
3.递推法
//使用递推思想,求解正整数的阶乘 //本算法的数学模型为 n! = (n - 1)! * n #include <iostream> using namespace std; int fact(int n) { int m[100]; //假设求100以内整数的阶乘 m[1] = 1; //递推的起始值 for(int i = 2; i <= n; i++) m[i] = m[i - 1] * i; return m[n]; //返回递推的终值 } int main() { int n; cin >> n; cout<< fact(n) <<endl; return 0; }
4.高精度求法
#include<iostream> #include<cstring> using namespace std; int a[100000]; int main() { int n; int i,j; cin>>n; a[0]=1,a[1]=1; for(i=1;i<=n;i++)//高精乘 { for(j=1;j<=a[0];j++) a[j]*=i; for(j=1;j<=a[0];j++) { a[j+1]+=a[j]/10; a[j]%=10; } if(a[j]>0)//进位处理 { while(a[j]>10) { a[j+1]+=a[j]/10; a[j]%=10; j++; } a[0]=j; } } for(i=a[0];i>=1;i--) cout<<a[i]; return 0; }
(adsbygoogle = window.adsbygoogle || []).push({});