c++求n階乘中尾部0的個數
作者:由 乙醯磺胺酸鉀 發表于 繪畫時間:2018-11-24
//求階乘結果需要使用使用遞迴 核心是函式recv(int n); sum=n*recv(n-1);
//求尾部0的個數時,我使用的是函式pow(10,k),k初值為1,用sum%pow(10,k),while(1),餘數不為0時輸出k,此時k即尾部0的個數
//需要注意int型只能計算到12的階乘,之後溢位,我使用unsigned long可以再多算幾個
#include
#include
using namespace std;
class solution{
public:
unsigned long recv(int n);
unsigned long getzeros();
private:
int n,k=0; unsigned long sum=1;
};
unsigned long solution::recv(int n)
{
if(n==1)
{
return 1;
}
sum=n*recv(n-1);
return sum;
}
unsigned long solution::getzeros()
{
k=0;
while(1)
{
unsigned long x = pow(10,k);
unsigned long y = sum % x;
if (y!=0)
{
return k-1;
}
else
{
k++;
}
}
}
int main(){
solution solu;
cout<<“輸入一個數獲得他的階乘”<
unsigned long q=solu。recv(p);
cout<<“階乘結果是”< int k=solu。getzeros(); cout<<“他的尾部0有 ”< return 0; }