資料結構 大數階乘

2021-09-28 13:58:00 字數 1427 閱讀 8814

【問題描述】

大數運算——計算n的階乘(n>=20)。

【基本要求】

(1)資料的表示和儲存;

(1.1)累積運算的中間結果和最終的計算結果的資料型別要求是整型——這是問題本身的要求;

(1.2)試設計合適的儲存結構,要求每個元素或結點最多儲存資料的3位數值。

(2)資料的操作及其實現:

基於設計的儲存結構實現乘法操作,要求從鍵盤上輸入n值;在螢幕上顯示最終計算結果。

【測試資料】

(1)n=20,n!=2432902008176640000

(2)n=30,n!=

265252859812191058636308480000000

【實現提示】

(1)設計資料的儲存結構:

介於階乘運算的精確性以及實型資料表示的不精確性,本題不能採用實型表示累積運算的中間結果和最終的計算結果,而只能用整型。然而由於普通整型和長整型所能表述數的範圍受其字長的限制,不能表示大數階乘的累積結果,故必須設計乙個合適的資料結構實現對資料的儲存,例如可以讓每個元素或結點儲存資料的若干位數值。

從問題描述不難看出n值為任意值,故為使程式盡量不受限制,應採用動態儲存結構。

(2)資料的操作及其實現:

(2.1)累積運算的特點是當前的計算結果是下次乘法運算的乘數;

(2.2)實現兩個數的乘法運算須考慮:

乘數的各位數都要與被乘數進行乘法運算;乘法過程中的進製問題及其實現;a因每個元素或結點最多儲存資料的3位數值,故當元素或結點中的數值大於

999,需向前乙個元素或結點進製。

(3)要求採用鏈式儲存結構實現(普通單鏈表,迴圈單鏈表,普通雙項鍊表和雙向迴圈鍊錶中任選一種結構)。

#include#include#includeusing namespace std;

/*第二題其實如果考慮雙向鍊錶儲存的話輸出會比較明了,

從前往後輸入,從後往前輸出。

但是因為有stringstream的存在,[注意輸出的時候要補0]

所以可以使得更加簡便

*/struct node

};node *root = new node(1);

void count(int i)

if (tmp != 0)//位數增加 }

int main()

string str = "";

while (root != null)

str = s + str;//在前面新增0

root = root->next;

} int ii = 0;

while (str[ii]=='0')

str = str.substr(ii);//去前導0

cout << str;

return 0;

}

大資料結構解析

結構大資料報括結構化 半結構化和非結構化資料,非結構化資料越來越成為資料的主要部分。據idc的調查報告顯示 企業中80 的資料都是非結構化資料,這些資料每年都按指數增長60 大資料就是網際網路發展到現今階段的一種表象或特徵而已,沒有必要神話它或對它保持敬畏之心,在以雲計算為代表的技術創新大幕的襯托下...

Java資料結構 大數相加

public class example3 2 if partialsum 10 else linkstack temp sa.isempty sa sb 引用指向加數和被加數中非空棧 while temp.isempty else else 如果在最後一次執行加法運算中,不需要進製 sum.pus...

N的階乘 大數階乘

輸入n求n的階乘的準確值。input 輸入n 1 n 10000 output 輸出n的階乘 首先,要確定n的階乘的數字大概有多少位,這樣便於我們去選擇合適的演算法。階乘 當n 10000時,上式值為35660 已經向上取整 所以接受 include include include include ...