




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、J I A N G S U U N I V E R S I T Y算法設計與分析課程設計設計分析測試報告 題目: 求兩個數的最大公因數專業班級: J軟件工程1 姓 名: 高陽 學 號: 4121169020 指導教師:茍建平 2014年 12月程序算法設計說明書一、 前言1. 問題描述最大公因數。編寫一個完整的程序,計算任意兩個整數a, b 的最大公因數,其中0a, b10100。(要求:禁止網上下載大數類實現;10 分鐘內輸出結果)2. 程序編制環境相關說明系統:WINDOWS 8.1編制環境:visual studio 2013二、 程序主要算法設計分析說明算法設計思路:用取模來加速計算,
2、但大數不能用數值類型來存儲,得用字符串或數組來運算,我下面是用字符串來實現的。用字符串來進行計算,從低位到高位計算。當數很大時,因為輾轉相除法是用減法來做的,數太大,所需時間過長,不滿足10分鐘內輸出結果,所以算法需要加速。所以假設更大的那個數的長度是len1,更小的是len2,取模,關鍵算法就是把小的數擴大10*(len1-len2-1)倍,相減之后相當于一下子減了小數10*(len1-len2-1)次。三、 程序模塊說明1. 總體設計說明程序采用自己定義的a來存取第一個輸入的數。定義一個b來記錄第二個輸入的數。11為a長度。12為b長度比較11和12。lena存放a的的數長度。lenb存放
3、b的數的長度。用ca一一存放a的的字符。用經過比較處理的b作為結果輸出。2.模塊說明:采用3個函數,Compare函數,來比較a,b里存放數的大小,長度來確定a和b的順序(字符多的放a)。Subtract函數來實現相減的功能。Main函數里實現輸入和輸出,以及比較。時間復雜度為O(n)。4、 總結(含主函數設計說明)這次課程設計的題目有點復雜,一開始看到這個題目時,還不知道要怎么下手解決。后來在網上搜索了一下求最大公因數問題及算法。發現將數轉換為字符來算就簡單了。算法解決了,接下來具體用什么數據結構,用數組最簡單。確定兩個數組,程序就基本定下來了,算法解決了,接下來具體用什么數據結構實現也是個
4、問題。最后還是覺得直接用數組最簡潔。確定了用char數組,以及比較的方法。為實現程序循環,開始就用了while,后由用戶自己輸入數字。總結這次課程設計,雖然程序的實現并不難,也不復雜。但是實現程序的算法卻難倒了我。這也讓我深刻地體會到了算法的力量。在以后的學習中,我一定會注意自己的薄弱環節,好好補充知識。五、 時間復雜度:O(n)程序及算法測試報告一、 前言1. 測試目的及采用的主要測試方法目的:測試該程序能否成功求出兩數的最大公因數,以及速率。測試方法:用不同的數據測試,判斷是否有誤。代碼:using System;using System.Collections.Generic;using
5、 System.Linq;using System.Text;namespace 大數最大公因數 class Program static void Main(string args) string a, b; while (true)/控制程序循環 Console.WriteLine("Please input 0 to exit!");/開關 Console.WriteLine("輸入第一個數: "); a = Console.ReadLine();/a記錄第一個數 if (a = "0") break; Console.Writ
6、eLine("輸入第二個數: "); b = Console.ReadLine();/b記錄第二個數 Compare(ref a, ref b);/比較ab是否一樣 while (a != "0") Compare(ref a, ref b); string bb = b; int l1 = a.Length, l2 = b.Length;/記錄a,b的長度 if (l1 - l2 > 1)/若a大于b for (int i = 0; i < l1 - l2 - 1; i+) bb += "0" while (a.Leng
7、th > bb.Length) Subtract(ref a, ref bb); Subtract(ref a, ref b); Console.WriteLine("The greatest common divisorb is:n0", b); Console.Read(); static void Compare(ref string a, ref string b) int lena = a.Length;/a長度 int lenb = b.Length;/b長度 if (lena > lenb) return; else if (lena < l
8、enb) string temp = a; a = b; b = temp; return; else int i = 0, j = 0; while (true) if (ai > bi) return; else if (ai < bi) string temp = a; a = b; b = temp; return; else i+; j+; if (i = a.Length) return; static void Subtract(ref string a, ref string b) S Compare(ref a, ref b); char ca=a.ToCharA
9、rray();/把輸入的a一一放入char數組里 char cc=new chara.Length;/定義一個長度為a長度的cc數組 int i = a.Length - 1, j = b.Length - 1; while (j >= 0) if (cai >= bj) cci = Convert.ToChar(cai - bj + 48);/轉換長度 else cci = Convert.ToChar(cai + 10 - bj + 48); cai - 1 = Convert.ToChar(cai - 1 - 1); i-; j-; while (i >= 0)/i為長
10、度 if (!(cai >= '0' && cai <= '9') cci = Convert.ToChar(cai + 10); cai - 1 = Convert.ToChar(cai - 1 - 1); else cci = cai; i-; i = 0; while (i<cc.Length) if (cci = '0') i+; else break; if (i = cc.Length) a = "0" else a = new string(cc, i, cc.Length - i); 2. 測試環境說明系統:WINDOW
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- GB 7718-2025食品安全國家標準預包裝食品標簽通則
- GB/T 45403-2025數字化供應鏈成熟度模型
- 山東省棗莊市嶧城區第二十八中學2024-2025學年初三第二次綜合練習生物試題含解析
- 內江職業技術學院《會計專業英語》2023-2024學年第二學期期末試卷
- 運城幼兒師范高等專科學校《能源與動力技術進展》2023-2024學年第二學期期末試卷
- 山東省棗莊市市中學區五校聯考2025屆初三第一次模擬考試(1月)語文試題試卷含解析
- 華北理工大學輕工學院《大學物理學下》2023-2024學年第一學期期末試卷
- 重慶機電職業技術大學《心理咨詢理論與技術(一)》2023-2024學年第一學期期末試卷
- 江西省吉安市吉安縣重點中學2025屆初三第三次模擬練習英語試題文試題含答案
- 云南能源職業技術學院《鍵盤基礎訓練(二)》2023-2024學年第二學期期末試卷
- 安徽省《地下水監測井建設技術規范》DB34-T 4822-2024
- 煤礦管理人員事故隱患排查治理專項培訓課件
- 碧桂園集團《安全文明措施標準化手冊》
- 專科機電一體化大專課程畢業論文范文
- 水族館節能減排策略-洞察分析
- 施工單位進場流程
- 《演講要素》課件
- 極端天氣應急
- 兒童系統性紅斑狼瘡診斷與治療評析
- 度假酒店的規劃與開發
- 新高考數學二輪復習講練專題06 函數與導數常見經典壓軸小題歸類(26大核心考點)(講義)(解析版)
評論
0/150
提交評論