C語言求階乘從右往左非零的數字。或者數學上分析也行

2021-03-27 11:15:23 字數 4153 閱讀 1100

1樓:匿名使用者

//求階乘最後非零位,複雜度o(nlogn)

//返回該位,n以字串方式傳入

#include

#define maxn 10000

int lastdigit(char* buf);

int len=strlen(buf),a[maxn],i,c,ret=1;

if (len==1)

return mod[buf[0]- '0 '];

for (i=0;i =0;i--)

c=c*10+a[i],a[i]=c/5,c%=5;

} return ret+ret%2*5;

} 首先我們可以知道,

n!中因子5的數目為

k(n)=[n/5]+[n/25]+[n/125]+...

如果記f(n)為所求的n!去掉0後最後一位數字

g(n)為1*2*3*4*6*7*8*9*11*...*n最後一位數字

也就是g(n)是n!中去掉5的所有倍數後乘積的最後一位數

所以我們可以知道

f(n)*2^k(n)=g(n)*f([n/5]) (mod 10)

左邊要乘上2^k(n)是因為右邊去掉k(n)個5,所以左邊需要新增k(n)個2(2*5=10)來達到平衡

容易知道g(n)(n>=2)是個以10為週期的函式

式子f(n)*2^k(n)=g(n)*f([n/5]) (mod 10)

可以得出

f(n)*2^k(n)=g(n)*f([n/5]) (mod 5)

或者f(n) = g(n)*3^k(n) *f([n/5]) (mod 5)

記g(n) = g(n)*3^[n/5] (mod 10)

那麼我們得到

f(n) = g(n)*g([n/5])*g([n/25])*...

其中g(n)是週期為20的函式(n>=2)

上面程式中用到陣列就是g(n)

2樓:匿名使用者

c語言中階乘怎麼輸?

3樓:很多很多

1、不是直接輸入n!,需要一定的演算法才可以實現。具體方法是,首先開啟編輯器,準備好空白的c語言檔案:

2、在編輯器中輸入**,這裡所謂 n 的階乘,就是從 1 開始乘以比前一個數大 1 的數,一直乘到 n。c語言中可利用迴圈解決,可以假設迴圈變數為 i,初值為 1,i 從 1 變化到 n;依次讓 i 與 sum 相乘,並將乘積賦給 sum,最後輸出sum的值就可以了:

3、在編輯器中執行程式,隨意輸入一個數,按下回車鍵,即可列印出階乘的結果來:

4樓:官官

for (;;)console.writeline("的階乘值為", num, jc);console.writeline("你是否還需要使用此階乘計算器,1-是,2-否");int numb = int.

parse(console.readline());if (numb == 1){}if (numb == 2)}console.readkey();

5樓:元元子彈

c語言中階乘沒有直接表達的方法,並不是數學中的 n! 。

而且,c語言也沒有直接計算階乘的函式,所以只能自己寫一個函式來實現。

int fact(int n)

這樣呼叫fact(n)即可返回n的階乘。

為防止資料過大溢位,也可將int改為long,或加判斷檢測資料範圍。

更多參考

6樓:程式設計師的每一天

c語言經典例子之利用遞迴方法求階乘

7樓:風過滄海

沒有現在的階乘運算子。

可以自己寫函式實現

8樓:匿名使用者

int fun(int n)

9樓:大衍之

int i;

int n=5;

int k=1;

for(i=1;i<=n;n++)

k=l*i;

k就是了

【**等】c語言程式:對n的階乘求和,n=1到10

10樓:匿名使用者

分析下程式,階乘可以用遞迴做,也可以用迴圈做,這裡就放上這兩種**了。

一.遞迴:

#include

int f(int t)

int main()

程式分析:定義一個f函式,利用遞迴的特性,進行運算10*f(9) = 10*9*f(8) …… 直到到1時返回1得出結果:

二.迴圈:

#include

int main()

printf("%d", t1);

return 0;

}程式分析:直接用一個for迴圈進行自減即可完成,定義t1用於儲存結果

得出結果:

11樓:匿名使用者

#include

int main()

sum+=c;//把結果累加在sum中

}printf("%d",sum);

return 0;}

12樓:時間箭頭

#include

int main()

printf("%d的階乘求和結果是%d\n",n,s);

return 0;

}在輸入介面輸入10,按enter,得結果4037913

13樓:匿名使用者

計算從1到10各數階乘

的和,即1! + 2! + 3! + …… + 9! + 10! 的和

#include

int main(void)

printf("1到10各數階乘的和 %d\n",sum);

return 0;}

14樓:

#include "stdio.h"

int main(int argv,char *argc)結果:

15樓:匿名使用者

#include

int main()

sum=sum+factorial;

} cout<<"結果是:"<

getchar; //顯示螢幕停止,不閃退getchar;

return 0;}

16樓:逐夢兮樂

#include

double fun(int n)

int main()

祝你愉快!

17樓:獨思花知

#include"stdio.h"

int main()

sum += n;

return 0;}

c語言中怎麼得到任意整數的階乘末尾的0的個數?

18樓:匿名使用者

/* 算到0xffffffff的階乘沒

問題. 再大就要換資料專型別屬

了 */

#include

unsigned long calc ( unsigned long n )

int main ( void )

19樓:匿名使用者

先用for迴圈求階乘;

然後用取餘數的計算判斷一下最後一個數字是否為0,比版如97010%10,那麼就

權是餘數就是0,只要%10就行。餘數為0就把他輸出,不是0的不用管。也要一個迴圈來遍歷一下。

很簡單,自己寫好了。

另外任意整數是不現實的,必須定義一個最大值,要不計算機會溢位的,隨便給個最大值。比如99999,然後迴圈求從1到99999的連乘運算。最後迴圈用%10的方法,是0的就輸出,不是0的就罷了。

20樓:匿名使用者

int faczeros(int n)

return rzt;}

c語言求1到n的階乘之和,c語言求1到n的階乘之和s

1 首先開啟vc6.0,新建一個專案。2 新增標頭檔案。3 新增main主函式。4 定義int變數i。5 定義double型別變數sum,mix,並賦予初始值。6 使用for迴圈求sum。7 使用printf列印sum。8 執行程式,看看結果。錯誤比較多。語法錯誤 return後少 不解釋 1 主函...

c語言用遞迴呼叫函式的方法求n的階乘,要具體解釋一下,具體到每一行

unsigned int jiechen unsigned int n 你好,這是我為你寫的程式,希望對你有用。程式和註釋如下 include using namespace std long jisuan int n 遞迴函式void main 反覆呼叫函式自身,直到滿足某一條件 include ...

c語言求各位數字組成的最大數,C語言求各位數字組成的最大數

其實吧,這個程式的核心思路也可以換種說法 就是給一個數由大到小排列 這一點你做出來了。一起 一下,我們一步步順著來看看 先來分析一下你那1100變成1001的問題 我用實際的過程讓你看一下程式執行過程吧 接下來是剝位置統計個數j,這一點很好。注意當前陣列的位置 然後實現了一次迴圈之後 第二重迴圈m ...