#include <bits/stdc++.h>
using namespace std;
int a[100000000] = {0};//开数组,最多开这么多,开多了会报错
int main()
{
a[1]=1;//首位初始化为1
long long int n;
scanf("%lld",&n);//要阶乘的数
int weishu = 1;
for(int i=2; i<=n; i++) //从2~n,挨个乘一遍,即阶乘
{
int up = 0;//up为进位,每次
int temp = 0;//temp为当前位数位置计算出的值
for(int j=1; j<=weishu || up!=0; j++)//当前的数i乘上现有数的每一位,并往高处进位
{//右条件保证了进位
temp = a[j]*i + up;//当前计算出的数据
up = temp/10;//进位为计算结果/10
a[j] = temp%10;//这一位数结果为计算结果%10
weishu = max(weishu,j);//记录最高位数
}
}
for(int i=weishu; i>=1; i--)//倒序打印
{
printf("%d",a[i]);
}
printf("\n-------------\n");//分隔符
//用一般阶乘作为对比,虽然最多只能计算21的阶乘,但聊胜于无
long long int contrast = 1;
for(int i=1; i<=n; i++)
{
contrast *= i;
}
printf("%lld",contrast);
return 0;
}
C++ 高精度阶乘
最新推荐文章于 2024-07-30 16:21:09 发布