对任意输入的正整数N,编写C程序求N!的尾部连续0的个数,并指出计算复杂度。如:18!=6402373705728000,尾部连续0的个数是3。
(不用考虑数值超出计算机整数界限的问题)
这题在网上也看到不少做法,个人感觉这个算法会比较简介,有效率~欢迎讨论~
/*
* FileName: NumZero.cpp
* Type: C++
* Copyright: (c) 2009 Jingyi Xiao
* Authors: Jingyi Xiao
* Description:
*/
#include
using namespace std;
int NumZero (){
int test_number = 200; // 这里是你要计算的N
int tmp;
int res = 0;
while (test_number > 4){ // 4以下就不管了,没有0
tmp = test_number--;
while(tmp % 5 == 0){ // 这里是本算法的精髓
++res;
tmp /= 5;
}
}
cout << res << endl;
return 0;
}