




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 四年级学习探秘
- 图木舒克职业技术学院《奥尔夫与柯达伊音乐教学法》2023-2024学年第二学期期末试卷
- 湘西市重点中学2025年高三下学期期末模拟英语试题含解析
- 平利县2025年数学四下期末统考模拟试题含解析
- 山东省潍坊市昌邑市2025届小升初模拟数学测试卷含解析
- 山东省宁津县市级名校2024-2025学年初三年级第二学期语文试题周练一(含附加题)含解析
- 上海市浦东新区2024-2025学年高三下学期期末考试(生物试题文)试题含解析
- 江苏省南通市海安市2025届初三下学期尖子生物理试题含解析
- 上海市度嘉定区2024-2025学年高中毕业班第二次模拟(语文试题文)试卷含解析
- 2025年营养师职业资格考试试题及答案
- 财务岗位招聘笔试题及解答(某大型国企)2025年
- 第六次全国幽门螺杆菌感染处理共识报告-
- 电影与幸福感学习通超星期末考试答案章节答案2024年
- 《飞越疯人院》电影赏析
- 屋顶分布式光伏项目可行性研究报告
- 《建筑结构抗震设计》全套课件
- 农业综合执法大比武测试题
- 时花采购供应投标方案(技术方案)
- 专题14 阅读理解七选五-【好题汇编】五年(2020-2024)高考英语真题分类汇编
- 厂区围墙翻新施工方案
- 国开《Windows网络操作系统管理》形考任务5-配置DNS服务实训
评论
0/150
提交评论