用C++编写求N的阶乘最后面的非零位的程序(N很大)!

 我来答
爱教育爱学习
高粉答主

2019-10-20 · 学而不思则罔,思而不学则殆
爱教育爱学习
采纳数:384 获赞数:112720

向TA提问 私信TA
展开全部

/*

阶乘最后一位非零数

*/

#include"bits/stdc++.h"

usingnamespacestd;

intexgcd(inta,intb,int&x,int&y,intc)

{

if(b==0)

{

x=c;

y=0;

returna;

}

intd=exgcd(b,a%b,x,y,c);

intt=x;

x=y;

y=t-a/b*y;

returnd;

}

intmain()

{

longlongfac[10]={1,1,2,6,24};

longlongN;

while(cin>>N)

{

intk=0;

longlongans=1;

while(N)

{

k+=N/5;

ans*=fac[N%5];

ans%=5;

N/=5;

}

k%=4;

ans*=1<<k;

ans%=5;

intx,y;

exgcd(5,2,x,y,-ans);

intres=x*5+ans;

res=(res%10+10)%10;

cout<<res<<endl;

}

}

扩展资料

阶乘亦递归方式定义:0!=1,n!=(n-1)!×n

#include<stdio.h>

intmain()

{

intn,i;

unsignedlonglongfactorial=1;

printf("输入一个整数:");

scanf("%d",&n);

//如果输入是负数,显示错误

if(n<0)

printf("Error!负数没有阶乘jiechen");

else

{

for(i=1;i<=n;++i)

{

factorial*=i;//factorial=factorial*i;

}

printf("%d!=%llu",n,factorial);

}

return0;

}

参考资料来源:百度百科—c语言

841404686
2011-04-17 · 超过53用户采纳过TA的回答
知道小有建树答主
回答量:137
采纳率:100%
帮助的人:108万
展开全部
#include<stdio.h>
void main()
{
int a=1,i,n;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
a=a*i;
while(a%10==0)a=a/10;
a=a%10;
}
printf("%d\n",a);
}
更多追问追答
追问
我跟你做的是一样的,但是这种方法在某种情况,会出现错误,你能解释一下吗?
追答
在什么情况下,我还没发现,你举个例子
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式