您當前的位置:首頁 > 繪畫

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<<“輸入一個數獲得他的階乘”<>p;

unsigned long q=solu。recv(p);

cout<<“階乘結果是”<

int k=solu。getzeros();

cout<<“他的尾部0有 ”<

return 0;

}

標簽: unsigned  long  int  recv  sum