C語言程式設計-長整數加法運算
課程設計題目及要求:長整數加法運算
【問題描述】
設計一個實現任意長的整數進行加法運算的演示程式。
【基本要求】
利用雙向迴圈連結串列實現長整數的儲存,每個結點含一個整型變數。任何整型變數的範圍是-(215-l)~(215-1) 。輸入和輸出形式:按中國對於長整數的表示習慣,每四位一組,組間用逗號隔開。
【測試資料】
(1) 0;0; 應輸出 “0” 。
(2)-2345,6789; -7654,3211; 應輸出 “-1,0000,0000” 。
(3)-9999,9999;1,0000,0000,0000; 應輸出 “9999,0000,0001” 。
(4) 1,0001,0001;-1,0001,0001; 應輸出 “0” 。
(5) 1,0001,0001;-1,0001,0000; 應輸出 “1” 。
(6) -9999,9999,9999;-9999,9999,9999;應輸出 “-1,9999,9999,9998” 。 (7) 1,0000,9999,9999;1; 應輸出 "1,0001,0000,0000 " 。
【實現提示】
(1) 每個結點中可以存放的最大整數為 215-1=32767, 才能保證兩數相加不會溢位。但若這樣存放,即相當於按32768進位制數存放,在十進位制數與32768進位制數之間的轉換十分不方便。故可以在每個結點中僅存十進位制數的4位,即不超過9999的非負整數,整個連結串列表示為萬進位制數。
(2) 可以利用頭結點資料域的符號代表長整數的符號。相加過程中不要破壞兩個運算元連結串列。不能給長整數位數規定上限。
(3)實現長整數的四則運算;
【選作內容】
(1)實現長整數的乘方和階乘運算;
(2)整型量範圍是- (2n-1) ~ (2n-1), 其中,n是由程式讀人的參量。輸入資料的分
組方法可以另行規定
系統功能和原始資料
1.原始資料
(1) 0;0; 應輸出 “0” 。
(2)-2345,6789; -7654,3211; 應輸出 “-1,0000,0000” 。
(3)-9999,9999;1,0000,0000,0000; 應輸出 “9999,0000,0001” 。
(4) 1,0001,0001;-1,0001,0001; 應輸出 “0” 。
(5) 1,0001,0001;-1,0001,0000; 應輸出 “1” 。
(6) -9999,9999,9999;-9999,9999,9999;應輸出 “-1,9999,9999,9998” 。
(7) 1,0000,9999,9999;1; 應輸出 "1,0001,0000,0000 " 。
2.系統功能
用連結串列來實現任意長度的長整數的加法
程式總體設計
(1)資料結構
採用雙向連結串列
(2)模組劃分和層次結構
十一個函式,main函式在開頭;
呼叫每個函式;
(3)函式原型清單
1.int Compare(dnode *a, dnode *b) ;
功能:用來比較連結串列中存入的兩個數的大小
2.void InitNode(dnode **head);
功能: 初始化連結串列
3.int InitNumber(dnode *head, char *data) ;
功能:將字元轉化為數字後,插入數字
4.void InsertNode(dnode *head, int x);
功能: 建立插入節點
5.void InsertNodePre(dnode **head, int x);
功能: 相加後,將結果插入已有節點的前面
6.void Addition(dnode *a, dnode *b) ;
功能: 相加
7.dnode* add(dnode *a, dnode *b) ;
功能: 進行相加,結果存入連結串列中,返回頭指標
8.dnode* sub(dnode *a, dnode *b) ;
功能: 進行相減,結果存入連結串列中,返回頭指標
9 void des( dnode *head);
功能:銷燬連結串列,釋放記憶體;
9.void PrintNode(dnode *head);
功能: 輸出連結串列
(4)程式總體框架
功能模組函式設計和除錯
主要模組:
加法:dnode* add(dnode *a, dnode *b)
功能:實現兩個同號的長整數相加;每個相加後的節點存入建立的新連結串列;
要考慮到進位,滿10000進一,每次計算時要注意加上進位的數值;
num = x + y + jin;//兩個相加,在加上進位的;
jin = num /10000;//因為是萬進位制,所以滿萬進一;
num = num%10000;;
if(jin > 0)//如果從後往前最後一位相加後,有進位的話,
InsertNodePre(&head, jin);
減法:dnode* sub(dnode *a, dnode *b)
功能: 這個函式用來 實現兩個異號的長整數相減;每個相加後的節點存入建立的新連結串列中;
要考慮到借位,每次相減要減去借位的數值
num = x - y - borrow;//減去借位的
borrow = 0;//初始化變數
if(num
borrow = 1;
num =num + 10000 ;
}
程式清單:
原始碼:
執行結果:
錯誤提示:非法字元:
課程設計總結
透過課設,對連結串列的理解更深一些,對於連結串列的新增,刪除和插入都更熟悉;
在檢查程式的時候,除錯的時候發現在迴圈一遍後,有些變數忘記重新初始化;
在查錯的時候,輸入非法字元程式會崩潰,進行控制判斷後,可以輸出錯誤資訊提示;
參考資料: 李戈影片. 錢能教材
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2524/viewspace-2797529/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- C++ std::list實現大整數加法運算C++
- 運算整數C/C++位運算技巧C++
- C#函數語言程式設計C#函數程式設計
- Python使用遞迴法和函數語言程式設計計算整數各位之和Python遞迴函數程式設計
- 逍遙自在學C語言 | 算數運算子C語言
- C語言位運算C語言
- C語言資料型別和算數運算C語言資料型別
- C語言:迴文數計算C語言
- 偽隨機數C語言程式設計隨機C語言程式設計
- C++的函數語言程式設計C++函數程式設計
- 「Golang成長之路」函數語言程式設計Golang函數程式設計
- 算數表示式求值--c語言課程設計C語言
- C語言程式設計C語言程式設計
- 計算位數最高達300位的兩個非負整數的乘積,C語言程式設計實現C語言程式設計
- (C語言) int型之間除法運算,向零取整C語言
- C語言程式設計入門之--第五章C語言基本運算和表示式-part2C語言程式設計
- Numpy 加法運算,opencv 加法運算,影像的融合OpenCV
- 「Golang成長之路」函數語言程式設計篇Golang函數程式設計
- 演算法用連結串列模擬大整數加法運算演算法
- C/C++模運算(正負整數)C++
- 複數的四則運算(C語言實現)C語言
- C語言程式設計原理C語言程式設計
- c語言程式設計題C語言程式設計
- C語言如何計算陣列的長度C語言陣列
- C語言Socket程式設計(計算機網路作業)C語言程式設計計算機網路
- 高精度加法(C語言實現)C語言
- 大整數運算C#實現C#
- 取冪運算--C語言描述C語言
- 函數語言程式設計函數程式設計
- C#函數語言程式設計思想及案例C#函數程式設計
- [搬運]寫給C#開發人員的函數語言程式設計C#函數程式設計
- Scala 函數語言程式設計(一) 什麼是函數語言程式設計?函數程式設計
- C語言MySQL程式設計示例C語言MySql程式設計
- C 語言程式設計(unix) (轉)程式設計
- 結對程式設計(c語言)程式設計C語言
- C語言:計算輸入字元的個數C語言字元
- C語言計算輸入字元的個數C語言字元
- C#中的函數語言程式設計:序言(一)C#函數程式設計