大數階乘和乙個數的n次冪(c語言)

2021-06-26 13:51:48 字數 1056 閱讀 6517

對於乙個數的階乘或者乙個數的n(n比較小)次冪,一般情況下(不是競賽),用乙個for迴圈,就可以解決問題,對於這樣的問題一般人都可以解決,但是如果遇到比較大的階乘,比如1000的階乘,或者是2的128次方,我們應該怎麼讓計算機替我們計算呢,用double?好像不行,這個時候,直接用現成的資料型別,是解決不了問題的,而是需要用我們的陣列來儲存各個位上的數字。

先把**貼上:

#include

int main(void)

;p[0]=1;

digit=1; / / 剛開始的位數

for(i=2;i<=num;i++)// 從二一直乘到sum

while(c!=0)//用while把c分配到各個高位

}for(j=digit-1;j>=0;j--)//輸出

程式的總體思想就是,把陣列中的每個數都當做一位,先讓第一位p[0]為1,然後讓每一位都乘上2,一直乘到要算的階乘的那個數,期間如果結果大於十,就向前進一位,知把所有的數都乘完,把各個位數存到陣列中,然後再從後向前輸出。

如果是求乙個數的次冪,應該怎麼寫程式呢?其實原理都是一樣的,只需要把上面的程式作乙個小小的改變就行!

#include

int main(void)

;p[0]=1;

digit=1; / / 剛開始的位數

for(i=1;i<=num;i++)// 一共乘num次

while(c!=0)//用while把c分配到各個高位

}for(j=digit-1;j>=0;j--)//輸出

printf("%d",p[j]);

printf("\n");

}return 0;

}執行結果:2^32和2^64

java 判斷乙個數是否是2的n次冪

與運算操作方法 2的n次冪的特點 它的所有的因子都是2,它的二進位制表示形式只有乙個1 例如 a 0100 0000 a 1 0011 1111 a 0100 1000 a 1 0100 0111 分別進行與運算,如果是2的n次冪,則與結果為false。即執行結果為false的數,即不是2的n次冪,...

假期程式設計練習 乙個數的n次冪取餘

problem description 求a b的最後三位數表示的整數。說明 a b的含義是 a的b次方 input 輸入資料報含多個測試例項,每個例項佔一行,由兩個正整數a和b組成 1 a,b 10000 如果a 0,b 0,則表示輸入資料的結束,不做處理。output 對於每個測試例項,請輸出a...

C 利用遞迴求乙個數的階乘 遞迴 階乘

當然也可以用迭代 就是迴圈 來求階乘,遞迴適用於選擇結構,迭代適用於迴圈結構。能用遞迴解決的問題,一定能用迭代來解決。c 利用遞迴求乙個數的階乘 遞迴 即自己呼叫自己 分類 分為直接呼叫和間接呼叫 直接呼叫 不通過其他函式直接在本函式內,呼叫自己。間接呼叫 通過多步操作,在其他函式內呼叫本身。inc...