求1X2X3X4X....XN所得数的末尾有多少个0 ?
#include <iostream>
//求N!后面0的个数
using namespace std;
int i,ii,n;
long sum;
int main(int argc, char** argv) {
ii=0;
sum=1;//累乘
cin>>n;
for(i=1;i<=n;i++)
{
sum=sum*i;
//若后面有0,则去掉0并计数
while(sum%10==0)
{
sum=sum/10;
ii=ii+1;
}
sum=sum%1000;
}
cout<<"后面有"<<ii<<"个0";
return 0;
}
改进:
分析:分子中有多少个5,末尾就有多少个0
#include <iostream>
using namespace std;
int main(int argc, char** argv) {
int i,ii,j,n;
j=5;ii=0;
cin>>n;
while(j<=n)
{
i=j;
while(i%5==0)//有多少因子,就有多少个0
{
i=i/5;
ii=ii+1;//0的个数累加
}
j=j+5;//五五累加
}
cout<<n<<"的阶乘末尾有"<<ii<<"个0";
return 0;
}
再改进:
#include <iostream>
using namespace std;
//求N!后面零的个数,仅需sqrt(N)次循环
int i,ii,n;
int main(int argc, char** argv) {
cin>>n;
i=n;
ii=0;
while(i>=5)
{
i=i/5;
ii=ii+i;
}
cout<<ii<<endl;
return 0;
}