使用for循环
思路:从大向小乘。
int factorial(int num) // 计算阶乘非递归
{
for (int i = num - 1; i > 1; --i){
num *= i;
}
return num;
}
递归形式
思路:只要形参不为0,就返回形参副本减1的调用。注意0的阶乘为1。
int _factorial(int num) // 计算阶乘递归
{
if (num > 1)
return num * _factorial(num - 1);
else if (num == 0)
return 1;
}
高精度阶乘
#include<iostream>
using namespace std;
int main()
{
int n, j, temp; //j表示有多少位数字,temp用来算本位数字大小
int mod = 0; //余数(进位)
cin >> n;
int* arr = new int[10000]{ 1,1 }; //至少需要10000位数字
for (int i = 1; i <= n; i++)
{
for (j = 1; j < 10000; j++)
{
temp = arr[j] * i + mod; //算出本位大小
mod = temp / 10; //算出进位大小
arr[j] = temp % 10; //算出本位上实际数字
}
}
for (j = 9999; j > 0; j--) //把数组中多余的0去掉
{
if (arr[j] != 0)
{
break;
}
}
while (j) //倒着输出,直到最后一项
{
cout << arr[j];
j--;
}
return 0;
}