c++求大数的阶乘要求精确值
答案:2 悬赏:20 手机版
解决时间 2021-11-13 13:20
- 提问者网友:温柔港
- 2021-11-13 08:27
c++求大数的阶乘要求精确值
最佳答案
- 五星知识达人网友:骨子里都是戏
- 2021-11-13 09:48
long int fun(int i)
{
long int sum = 1;
while(i>=1){
sum*=i;
i--;}
return sum;
}追问unsigned long long才只能算到65!,long不够。。追答你要多大的阶乘,100的阶乘怎么输出啊,而且我不知道内存中会不会因为你的这个大数据把系统给整崩溃了,呵呵。
{
long int sum = 1;
while(i>=1){
sum*=i;
i--;}
return sum;
}追问unsigned long long才只能算到65!,long不够。。追答你要多大的阶乘,100的阶乘怎么输出啊,而且我不知道内存中会不会因为你的这个大数据把系统给整崩溃了,呵呵。
全部回答
- 1楼网友:七十二街
- 2021-11-13 11:25
#include
void BigFactorial(int m)
{
static int a[50000]={0,1};//第一位不用
int i,j,carry,k,tmp,lenth=1;//carry表示进位
for (i=2;i<=m;i++)
{
carry=0;
for (j=1;j<=lenth;j++)
{
//乘法转化为加法和进位
tmp=a[j]*i+carry;
a[j]=tmp%10;
carry=tmp/10;
//如果有进位,则向前扩展一位
if (j==lenth&&carry!=0)
lenth++;
}
}
printf("%d的阶乘: 位数:%d ",m,lenth);
for(k=lenth;k>=1;k--)
printf("%d",a[k]);
}
int main()
{
BigFactorial(1000);
}
void BigFactorial(int m)
{
static int a[50000]={0,1};//第一位不用
int i,j,carry,k,tmp,lenth=1;//carry表示进位
for (i=2;i<=m;i++)
{
carry=0;
for (j=1;j<=lenth;j++)
{
//乘法转化为加法和进位
tmp=a[j]*i+carry;
a[j]=tmp%10;
carry=tmp/10;
//如果有进位,则向前扩展一位
if (j==lenth&&carry!=0)
lenth++;
}
}
printf("%d的阶乘: 位数:%d ",m,lenth);
for(k=lenth;k>=1;k--)
printf("%d",a[k]);
}
int main()
{
BigFactorial(1000);
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯