求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;}
新闻热点
疑难解答