对任意输入的正整数N,编写C程序求N!的尾部连续0的个数,并指出计算复杂度。如:18!=6402373705728000,尾部连续0的个数是3。
(不用考虑数值超出计算机整数界限的问题)
(不用考虑数值超出计算机整数界限的问题)
int NumZero (int n){
int tmp;
int res = 0;
while (n> 4){ // 4以下就不管了,没有0
tmp = n--;
while(tmp % 5 == 0){ // 这里是本算法的精髓
++res;
tmp /= 5;
}
}
return res;
}
int tmp;
int res = 0;
while (n> 4){ // 4以下就不管了,没有0
tmp = n--;
while(tmp % 5 == 0){ // 这里是本算法的精髓
++res;
tmp /= 5;
}
}
return res;
}
///////////////////////////////////////
int NumZero (int n){
int res = 0;
int res = 0;
for(;n>0;n/=5) res += n/5;
return res;
}
return res;
}
转载于:https://blog.51cto.com/sbxxs/213674