长整数加减运算实验报告word资料20页

合集下载

长整数运算实验报告

长整数运算实验报告

一、实验目的1. 理解长整数的概念及其在编程中的应用。

2. 掌握长整数的基本运算方法,包括加法、减法、乘法和除法。

3. 提高编程能力,通过实际操作加深对长整数运算的理解。

二、实验环境1. 操作系统:Windows 102. 编程语言:Python3.83. 开发工具:PyCharm三、实验内容1. 长整数的定义与初始化2. 长整数的加法运算3. 长整数的减法运算4. 长整数的乘法运算5. 长整数的除法运算四、实验步骤1. 长整数的定义与初始化在Python中,长整数不需要特殊声明,只需按照常规整数进行定义即可。

下面是长整数的定义与初始化示例:```pythona = 123456789012345678901234567890b = 987654321098765432109876543210```2. 长整数的加法运算长整数的加法运算与常规整数相同,使用`+`符号。

下面是长整数加法运算的示例:```pythonresult = a + bprint("加法运算结果:", result)```3. 长整数的减法运算长整数的减法运算同样与常规整数相同,使用`-`符号。

下面是长整数减法运算的示例:```pythonresult = a - bprint("减法运算结果:", result)```4. 长整数的乘法运算长整数的乘法运算与常规整数相同,使用``符号。

下面是长整数乘法运算的示例:```pythonresult = a bprint("乘法运算结果:", result)```5. 长整数的除法运算长整数的除法运算与常规整数相同,使用`/`符号。

下面是长整数除法运算的示例:```pythonresult = a / bprint("除法运算结果:", result)```五、实验结果与分析1. 长整数的定义与初始化:通过定义长整数,我们了解了长整数在Python中的表示方法。

长整数、高精度运算程序报告

长整数、高精度运算程序报告

.华南理工大学
高级语言程序设计C++ 课程实验报告
实验题目:________长整数、高精度运算__________________________姓名:_______ ____ 学号:__ ________________
班级: ___计算机科学与技术2班________ 指导教师: _____邢安娜___
附注:
实验报告说明
1.实验项目名称:要用最简练的语言反映实验的内容。

2.实验目的与要求:目的要明确,要抓住重点,符合实验大纲的要求。

3.实验原理:简要说明本实验项目所涉及的理论知识。

4.实验环境:实验用的软硬件环境(配置)。

5.实验方案设计(思路、步骤和方法等):这是实验报告极其重要的内容。

概括整个实验过程。

对于操作型实验,要写明依据何种原理、操作方法进行实验,要写明需要经过哪几个步骤来实现其操作。

对于设计型和综合型实验,在上述内容基础上还应该画出流程图、设计思路和设计方法,再配以相应的文字说明。

对于创新型实验,还应注明其创新点、特色。

6.实验过程(实验中涉及的记录、数据、分析):写明上述实验方案的具体实施,包括实验过程中的记录、数据和相应的分析。

7.结论(结果):即根据实验过程中所见到的现象和测得的数据,做出结论。

8. 小结:对本次实验的心得体会、思考和建议。

9.指导教师评语及成绩:指导教师依据学生的实际报告内容,用简练语言给出本次实验报告的评价。

整数工程实验报告模板

整数工程实验报告模板

一、实验目的1. 理解整数运算的基本原理和方法。

2. 掌握整数加、减、乘、除运算的算法实现。

3. 通过编程实践,提高算法设计和编程能力。

4. 熟悉整数运算在工程应用中的重要性。

二、实验环境1. 操作系统:Windows 102. 编程语言:C/C++3. 开发环境:Visual Studio 20194. 实验设备:个人电脑三、实验原理整数运算是指对整数进行加、减、乘、除等基本数学运算。

在计算机科学中,整数运算的实现通常基于二进制表示和位操作。

本实验将基于此原理,通过编程实现整数运算。

四、实验内容1. 实现整数加法算法。

2. 实现整数减法算法。

3. 实现整数乘法算法。

4. 实现整数除法算法。

5. 编写测试程序,验证算法的正确性。

五、实验步骤1. 整数加法算法实现- 定义一个函数,接受两个整数参数,返回它们的和。

- 使用位操作实现加法运算。

2. 整数减法算法实现- 定义一个函数,接受两个整数参数,返回它们的差。

- 使用位操作实现减法运算。

3. 整数乘法算法实现- 定义一个函数,接受两个整数参数,返回它们的乘积。

- 使用位操作和位移操作实现乘法运算。

4. 整数除法算法实现- 定义一个函数,接受两个整数参数,返回它们的商和余数。

- 使用位操作和位移操作实现除法运算。

5. 编写测试程序- 编写测试函数,用于验证加、减、乘、除算法的正确性。

- 测试不同大小的整数,包括正数、负数和零。

六、实验结果与分析1. 整数加法- 输入:5,3- 输出:8- 分析:加法算法正确实现。

2. 整数减法- 输入:10,4- 输出:6- 分析:减法算法正确实现。

3. 整数乘法- 输入:-2,5- 输出:-10- 分析:乘法算法正确实现。

4. 整数除法- 输入:20,3- 输出:6,2- 分析:除法算法正确实现。

七、实验总结通过本次实验,我们成功实现了整数加、减、乘、除运算的算法,并验证了算法的正确性。

在实验过程中,我们学习了位操作和位移操作在整数运算中的应用,提高了算法设计和编程能力。

长整数四则运算 实验报告

长整数四则运算 实验报告

“数据结构”课程设计报告长整数四则运算学生姓名:吴成杰徐文良指导教师:陈少军所在系:电子信息系所学专业:计算机科学与技术年级:2010计算机(1)班目录第1章需求分析 (1)1.1选题要求 (1)1.2选题背景和意义 (1)1.3选题目标 (2)1.4组员分配任务 (2)第2章概要分析 (2)2.1系统数据流图 (2)2.2原始数据 (3)2.3输出数据 (3)2.4对数据的处理 (3)2.5数据结构(存储方式) (4)2.6模块分析 (4)第3章详细设计 (4)第4章系统说明书 (11)第5章系统测试 (12)项目总结 (16)参考文献 (17)第1章需求分析1.1选题要求1、实现一个任意长度的整数进行四则运算的演示程序(1) 运算过程分步骤显示(2) 完成含有加法和减法的四则运算(3) 完成含有乘法和除法的四则运算(4) 包含括号的四则运算2、2个人对应完成2个人各自的任务1.2选题背景和意义(1)选题背景操作系统老师曾经布置我们做一道斐波拉契数列和求30的阶乘,但是计算的结果很大,还不知道该做样的存储,老师告诉我们需要用高精度数的知识能将计算的结果存储起来,数据结构老师也曾经布置过一个实验题,是计算长整数的加法的,但是长整数的位数是固定的。

于是我们试想计算任意长度的整数是不是能把所有的四则运算问题解决。

(2)选题意义我们选的这个课题能计算任意的四则运算,比如:1234567+7654321=8888888987654321-123456789=86419754123*456=5608884/42=2586-25*15+8*(9*2-144/12)=586-375+8*(18-12)=586-375+8*6=586-355+48=211+48=2591.3选题目标实现一个任意长度的整数进行四则运算的演示程序(1) 运算过程分步骤显示(2) 完成含有加法和减法的四则运算(3) 完成含有乘法和除法的四则运算(4) 包含括号的四则运算1.4组员分配任务我们组有两个成员,分别为吴成杰和徐文良,一个负责写主函数、函数整体的框架和写转换函数函数和对输入的字符进行处理,一个负责写出栈函数和写处理函数和拼接,程序出现错误,两个人一起在一起互相商量,修改。

实验报告长整数四则运算

实验报告长整数四则运算

实验报告:长整数四则运算实验者:唐怡04120082 题目:设计一个实现任意长的整数进行加法运算的演示程序一.需求分析1.本演示程序中,长整数为任意长的带符号的长整数的输入及求加法后输出的长整数形式为每四位一组,组间用逗号隔开,输入以“回车符”为结束标志。

2.程度执行的命令包括:1)构造整数1,2)构造整数2,3)做加法运算,4)结束3.测试数据(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.有序表的抽象数据类型定义为:ADT Dulinklist{数据对象:D={ai|ai为带符号整数,1,2,…,n,n>=0}数据关系:R1={<ai-1,ai>|ai-1,ai属于集合D,ai-1<ai,i=2,…..,n}基本操作:InitDulinklist(&)操作结果:构造一个空的有序表LDestroyDulinklist(&)初始条件:有序表L已存在操作结果:销毁有序表LDulinklistLength(L)初始条件:有序表L已存在操作结果:返回有序表L的长度DulinklistEmpty(L)初始条件:有序表L已存在操作结果:若有序表L为空表,则返回TUER,否则返回FALSEGetElem(L,pos)初始条件:有序表L已存在操作结果:若干1〈=POS〈=LENGTH(L),则返回有序表L中第POS个数据元素。

长整数加减-实验报告

长整数加减-实验报告

实验一线性表实现方法题目:编制一个长整数加减运算实现的程序班级:计科0906 姓名:陆遥学号:2009481406015 完成日期:2010-11-10一、需求分析1、本实验中演示中,长整数的每位上的数字必须为数字[0——9]之间,长整数的位数要求无限长。

测试的时候输入数据,当输入回车键的时候结束输入,如果输入的字符不符合题目要求,则程序能过滤这些不符合要求的字符。

2、演示程序以用户和计算机的对话方式执行,即在计算机显示“提示信息”后之后,由用户在键盘上输入演示程序中规定的运算命令;相应的输入数据(滤去输入中不符合要求的字符)和运算结果显示在其后。

3、程序执行的命令包括:(1)创建第一个长整数;(2)执行加法或者减法;(3)创建第二个长整数;(4)结束。

4、测试数据(1)Please Enter the First long Integer:123456789+ or - :+Please Enter the Second long Integer:12345678123456789+12345678=135802467(2)Please Enter the First long Integer:123456789987654321+ or - :-Please Enter the Second long Integer:987654321123456789=-864197531135802468二、概要设计为实现上述程序功能,可以用链表或者长数组表示长整数,如果用数组表示长整数有个缺点就是长整数不能无限长,而链表能动态开辟空间,它克服了这个缺点,所以次试验用链表来表示长整数。

1、链表的抽象数据类型定义为:ADT Number{数据对象:D={a i| a i∈(0,1,…,9),i=0,1,2,…,n,n≥0}数据关系:R={< a i-1, a i >| a i-1, a i∈D,i=1,2,…,n}基本操作:CreateList (&L )操作结果:创建一个链表L 。

计算机软件及应用课程设计实验报告长整型数四则运算

计算机软件及应用课程设计实验报告长整型数四则运算

数据结构实验报告题目:长整型数四则运算学院计算机学院专业软件工程年级班别2010级1班成绩____________________2012年7月1日目录课程设计实验报告1一、实验概要- 1 -二、实验目的- 1 -三、实验环境- 1 -四、抽象数据类型的定义- 1 -五、存储结构的定义- 1 -六、算法设计- 2 -六、程序运行情况- 30 -七、实验总结- 33 -实验中遇到的问题:-33-实验总结:-33-八、思考题错误!未定义书签。

题目:长整型数四则运算一、实验概要1、设计一个实现任意长的整数进行四则运算的程序。

2、输入和输出形式是按中国对于长整数的表示习惯,每四位一组,组间用逗号隔开,长整数位数没有上限,以分号结束长整型数据的输入。

3、程序执行的命令包括:1)、输入长整数1;2)、输入长整数2;3)、输入执行的运算符;4)、计算并输出结果;5)、结束。

4、测试数据:(以加法为例)(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”.二、实验目的输入和输出形式是按中国对于长整数的表示习惯,每四位一组,组间用逗号隔开,长整数位数没有上限,以分号结束长整型数据的输入,进行计算三、实验环境Visual C++6.0四、抽象数据类型的定义1、双向循环链表的数据结构及操作定义如下:typedef short ElemType; //定义基本数据类型,我们采用short来表示任意4位整数。

数据结构课程设计报告长整数运算范文

数据结构课程设计报告长整数运算范文

数据结构课程设计报告长整数运算数据结构课程设计报告题目:长整数四则运算一、需求分析1.问题描述:由于工程上有时候需要对很大的数进行计算,可是计算机本身提供的数据类型无法保存几百位甚至几千位的数字,因此需要设计专门的算法对数据进行相应的计算。

此程序的设计任务是:设计一个程序能够实现长整数运算的程序,而且能够对一些错误异常进行辨别调整,计算出正确的结果。

程序输入格式是字符串,保存时需要用双向循环链表将字符串每四位保存在循环链表中的一个节点中,然后再计算后运行出结果。

2.基本功能功能一:建立双向循环链表,计算链表个数,对链表的数据进行修改,能在链表中插入结点。

功能二:将字符串转换成相应的数字存储在双向循环链表中功能三:对存入双向循环链表的长整数进行相加,相减,相除。

3.输入输出程序输入以字符串的形式输入,数据的类型是字符串,包含元素的范围是数字,逗号,负号。

输入时用字符串输入,输出时以一链表结点输出,而且每个结点表示四位。

二、概要设计1.设计思路:由于计算机无法完成位数很大的数字计算,设计思路就是将很长的数据进行分割,一部分一部分的用计算机固有数据类型进行计算。

将各部分的结果整合起来。

由于计算机固有的整数类型存数的对大整数是2^15-1,因此为了方便,且符合中国人对长整数的表示习惯,建立一个双向循环链表,每个结点存储四位数字,以万为进制。

从最低位开始加法,超过一万向上进位,因此每次加法应该是对应两个结点和进位数相加,进位值初始为0;减法也是一个结点计算一次,每次计算应该是第一个链表对应的结点值减去第二个结点的值和借位值的和,借位值初始值为0;除法的计算能够借助减法,被减数被减数减一次则最终结果加一;直至被减数比减数小。

2.数据结构设计:因为计算的是一个连续的数字,需要桉顺序一次计算,因此采用的数据结构的逻辑结构是线性表。

因为要求每一个结点只存储四位数字,为了将数字连接起来,采用的数据结构的存储结构是链式。

大整数计算实验报告

大整数计算实验报告

石家庄经济学院实验报告学院: 信息工程学院专业: 计算机科学技术计算机人论坛1.需求分析1.1开发背景在现实生活中不可避免地我们会遇到一些超大整数之间的运算,比如要计算马云的资产,以及国有银行的转账收入支出等一些数的存储等等类似的问题,而由于计算机整形数的最小值和最大值范围仅为-32768到32767,所以关于大整数的实验即呼之欲出,本实验就是针对数值很大、精度很高的大整数进行的加法减法以及乘法的计算。

1.2数据需求指针:L1,L2:分别为指向这两条存储要进行运算的链表头结点的指针;L3:指向乘法的结果链表;L4:在运算乘法的时候做中间量使用。

prior:双向链表的头指针;next:双向链表的尾指针。

data:整形数,链表所存的数据。

1.3功能需求对一个进行运算的软件,加法和减法是最基本的运算,本实验又额外增加了大整数的乘法。

1.4测试数据第一个数:9,568,974,512;第二个数:8,648,761,512;2.概要设计2.1功能模块图由需求分析可画出如下功能模块图。

图2-1 功能模块图2.2各功能子程序定义1.创建链表:Status creat(DuLinkList &L,char str[30]);2.输出链表中结点内的数据:Status output(DuLinkList L);3.加法:DulNode *Add(DuLinkList L1,DuLinkList L2);4.减法:DulNode *Sub(DuLinkList L1,DuLinkList L2);5.乘法:DulNode *Mul(DuLinkList L1,DuLinkList L2);计算机人论坛2.3主界面截图图2-3 程序主界面3.详细设计3.1数据结构设计此款软件是基于线性表双向链表完成的,在每个分过程中都充分利用了链表指针灵活又不太易于掌控的特性,但若是全面理解指针以及链表的特点,也是很容易设计此款软件的。

长整数的加减运算

长整数的加减运算

*******************实践教学*******************兰州理工大学技术工程学院2013年春季学期数据结构课程设计题目:长整数的加减运算专业班级:计算机科学与技术一班姓名:郭利强学号: 11730108指导教师:王连相成绩:计算机科学与技术专业数据结构课程设计任务书(11级)题目:长整数的加减运算学生姓名:郭利强学号:11730108班级:11级计算机科学与技术一班题目类型:软件工程(R)指导教师:王连相一.题目简介该设计要求学生设计程序,实现两个任意长的整数求和及差的运算问题。

通过该题目的设计过程,可以加深理解线性表的逻辑结构、存储结构,掌握线性表上基本运算的实现,进一步理解和熟练掌握课本中所学的各种数据结构,学会如何把学到的知识用于解决实际问题,培养学生的动手能力。

二.主要任务第一部分:基本算法实现1、线性结构基本算法实现(指导老师根据题目指定);2、树型结构基本算法实现(指导老师根据题目指定);3、图型结构基本算法实现(指导老师根据题目指定);4、查找基本算法实现(指导老师根据题目指定);5、排序基本算法实现(指导老师根据题目指定);第二部分:指定题目的设计与实现1、查阅文献资料,一般在3篇以上;2、建立数据的逻辑结构和物理结构;3、完成相应算法的设计;4、完成测试工作;5、撰写设计说明书;6、做好答辩工作。

三.主要内容、功能及技术指标(1)使用双向循环链表存储长整数,每个结点含一个整型变量,主要功能有:长整数输入(建立双向循环链表)、长整数的加法、长整数的减法及结果的显示输出等;(2)至少要用10组测试数据,算法对于这些合法的输入数据都能产生满足规格说明要求的结果;(3)算法对于精心选择的典型、苛刻而带有刁难性的几组输入数据能够得出满足规格说明要求的结果;对算法实现过程中的异常情况能给出有效信息;(4)任何整型变量的范围是-(215-1)~(215-1)。

输入和输出形式:按中国对于长整数的表示习惯,每四位一组,组间用逗号隔开,例1,0000,0000,0000;而输入为1,0001,0001和-1,0001,0000实现加法时,应输出"1";(5)较高要求:使程序在整型量范围是-(2n-1)~(2n-1)的计算机上都能有效地运行。

大整数减法实验报告(3篇)

大整数减法实验报告(3篇)

第1篇一、实验目的1. 掌握大整数减法的基本原理和方法。

2. 熟悉大整数减法在编程中的应用。

3. 培养学生分析问题和解决问题的能力。

二、实验原理大整数减法是指对两个大于等于零的整数进行相减运算。

在进行大整数减法运算时,需要注意以下几点:1. 被减数和减数必须都是非负整数。

2. 如果被减数小于减数,则减法运算结果为负数。

3. 大整数减法运算可以采用长减法、快速减法等方法。

本实验采用长减法进行大整数减法运算。

长减法是一种逐位相减的方法,具体步骤如下:(1)将被减数和减数对齐,从低位开始逐位相减。

(2)如果当前位被减数小于减数,则需要向前一位借位。

(3)重复步骤(1)和(2),直到所有位都处理完毕。

三、实验环境1. 操作系统:Windows 102. 编程语言:C++3. 开发工具:Visual Studio 2019四、实验步骤1. 定义一个函数实现大整数减法运算。

2. 编写主函数,输入被减数和减数。

3. 调用大整数减法函数,输出运算结果。

五、实验代码```cppinclude <iostream>include <string>include <algorithm>// 大整数减法函数std::string bigIntegerSubtraction(const std::string &num1, const std::string &num2) {std::string result;int len1 = num1.size();int len2 = num2.size();int carry = 0; // 进位// 补齐被减数和减数的长度if (len1 < len2) {std::swap(num1, num2);std::swap(len1, len2);}num1.insert(0, len2 - len1, '0');for (int i = len1 - 1; i >= 0; --i) {int n1 = num1[i] - '0';int n2 = num2[i] - '0';int n = n1 - n2 - carry;if (n < 0) {n += 10;carry = 1;} else {carry = 0;}result.push_back(n + '0');}// 删除结果中的前导零result.erase(0, result.find_first_not_of('0'));// 如果结果为负数,则添加负号if (result.empty()) {result = "0";} else if (result[0] == '0') {result.erase(0, 1);}return result;}int main() {std::string num1, num2;std::cout << "请输入被减数:";std::cin >> num1;std::cout << "请输入减数:";std::cin >> num2;std::string result = bigIntegerSubtraction(num1, num2);std::cout << "减法运算结果为:" << result << std::endl;return 0;}```六、实验结果与分析1. 当被减数大于减数时,程序输出正确的结果。

(完整word版)长整数四则运算实验报告

(完整word版)长整数四则运算实验报告

一、需求分析设计一个实现任意长的整数间进行四则运算的程序,要求完成长整数的加、减运算,乘除运算可选做。

在这里长整数没有范围限制,可任意长。

运算后的进位、借位等都要进行正确处理,可实现动态的输入,实时的输出。

测试数据:0、0;输出“0”2345,6789、-7654,3211;输出“1,0000,0000”1,0000,0000,0000、9999,9999;输出“9999,0000,0001”1,0001,0001、;1,0001,0001;输出“0”自选数据:1,1111;1,1111 输出“0”二、概要设计1、数据结构利用双向循环链表来实现对长整数的存储。

选择该数据结构来完成长整数的加减运算是因为a.要对长整数进行运算,需要对长整数进行存储,选择用链表对长整数存储。

b.存储的顺序是从左到右,运算的顺序则是从右到左,为操作方便选择循环链表。

c.在运算过程中有进位和借位的操作。

2、使用算法三、详细设计typedef struct DoubleNode //定义链表元素void InitNode(DLNode **head) //初始化链表int InsertNode(DLNode *head,int n,DataType x) //向链表第N个位置插入元素Xint digit(int n) //判断整数N有几位void PrintNode(DLNode *head) //打印链表void DestroyNode(DLNode **head)//销毁链表void add(DLNode *h1,DLNode *h2) //两数相加void jian(DLNode *h1,DLNode *h2) //两数相减int main() //入口函数四、调试分析由于在程序设计时,对于指针的不了解,编程时使用双重指针,无形中给自己增添了更多麻烦。

老师在检查的过程中指出并教导了这一点。

五、测试结果1、输入0和0做加法运算,输出“0”,结果如下图:2、输入2345,6789和-7654,3211做减法运算,输出“1,0000,0000”,结果如下图:3、输入1,0000,0000,0000和9999,9999做减法运算,输出“9999,0000,0001”,结果如下图:4、输入1,0001,0001和1,0001,0001做减法运算,输出“0”,结果如下图:5、输入1,1111和1,1111做减法运算,输出“0”结果如下图:六、心得体会本次实验主要是针对双向链表的练习,通过这次试验我们大家对于双向循环链表有了更深刻的记忆。

长整数四则运算实验报告

长整数四则运算实验报告

数据结构课内实验报告书一、实验题目:长整数四则运算二、实验目的:通过本次实验,熟练掌握链表的存储结构及其各种基本运算,体会链表操作的特点。

三、实验要求:设计一个实现任意长的整数进行加法运算的演示程序。

要求:利用双向循环链表实现长整数的存储,每个结点含一个整形变量。

任何整形变量的范围是-(215 - 1)~(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)存储结构的定义typedef struct int72 {int i[4];} INT72;INT72 a,b,c;typedef struct LinkNode{int data; //记录每个节点的整数(小于10000)LinkNode *next, *pre; //记录下一个节点的地址 *pre; //记录前一个节点的地址}linklist;(2)主要算法的描述void addtwo()//节点多的作为被加数,少的作为加数,实现整数绝对值大的加小的//默认head0存的整数绝对值比head1大{int s=0,m1=head0->data,m2=head1->data;m1=(head0->pre->data/abs(head0->pre->data)); //head0的符号m2=(head1->pre->data/abs(head1->pre->data)); //head1的符号linklist *p=head0->pre->pre,*q=head1->pre->pre;result->data=head0->pre->data; //存结果的节点数和符号while(q!=head1->pre)//head0存的整数绝对值比head1大,即head0的节点数大于或等于head1 {currptr=(linklist *)malloc(sizeof(linklist));currptr->data=(p->data)*m1+(q->data)*m2+s; //两整数相加if((m1*m2)>0) //如果符号相同{if(abs(currptr->data)-10000>=0) //相加后超过10000,则进位{s=currptr->data/10000;currptr->data=abs(currptr->data)%10000;}else //abs(currptr->data)-10000<0,不进位{s=0;currptr->data=abs(currptr->data);}}else if(m1>0&&m2<0)//符号不同,在此相当于实现两个正整数相减{s=0;if(currptr->data<0) //小于0,向前一位借1{currptr->data+=10000;s=-1;}}else if(m1<0&&m2>0)//符号不同,在此相当于实现负整数加上正整数{s=0;if(currptr->data>0) //大于0,{currptr->data=10000-currptr->data;s=1;}else currptr->data=abs(currptr->data);}currptr->next=result; //存入链表currptr->pre=result->pre;result->pre->next=currptr;result->pre=currptr;result=currptr;p=p->pre;q=q->pre;}//当head0节点数比head1长时,继续建链while(p!=head0->pre){currptr=(linklist *)malloc(sizeof(linklist)); currptr->data=p->data+s;s=currptr->data/10000;if((m1*m2)>0){if(abs(currptr->data)-10000>=0){s=currptr->data/10000;currptr->data=abs(currptr->data)%10000;}else {s=0;currptr->data=abs(currptr->data);} }else if(m1>0&&m2<0){s=0;if(currptr->data<0){currptr->data+=10000;s=-1;}}else if(m1<0&&m2>0){s=0;if(currptr->data>0){currptr->data=10000-currptr->data;s=1;}else currptr->data=abs(currptr->data);}currptr->data=abs(currptr->data)%10000; currptr->next=result;currptr->pre=result->pre;result->pre->next=currptr;result->pre=currptr;result=currptr;p=p->pre;}if(s!=0) //处理相加后,进位问题{currptr=(linklist *)malloc(sizeof(linklist));currptr->data=abs(s);currptr->next=result;currptr->pre=result->pre;result->pre->next=currptr;result->pre=currptr;result=currptr;result->pre->data=m1*(abs(result->pre->data)+1);}}六、技巧与体会在编写程序中尽量做到独立完成、对于自己想要完成的问题要主动编程完成、这样自己是一个很大的提升、也能学到很多的知识、熟练编程!以后要加强动手时间能力、多与同学交流算法精髓!。

数据结构:长整数的加减法(任意长度的加减法)

数据结构:长整数的加减法(任意长度的加减法)

《数据结构》课程设计报告课程设计报告名称长整数的加法运算实验室实验楼502 完成日期 2018年11月30日}(2) 程序结构图(3) 功能模块3. 详细设计:1. 存储结构采用双向链表,使用头结点存放符号,后继节点存放其数字部分长整数的运算计算方式加法减法结果输入符号位数字部分输入两个长整数选择计算方式 加法模块 减法模块3.算法描述1.针对同号加法void Sub(DualList a, DualList b, DualList c)对两个链表的节点进行的最低位进行加法,默认都需要进位,超过10000的情况,会给在操作下一位的时候在加上进位数字1,如果没有发生进位那就加上进位数0void Add(DualList a, DualList b, DualList c){DualList pa, pb;int carry = 0, tmp;pa = a->prior;pb = b->prior;while((pa != a) && (pb != b)){tmp = pa->data + pb->data + carry;if (tmp >= 10000){carry = 1;tmp -= 10000;}elsecarry = 0;InsertNodeAtHead(c, tmp);pa = pa->prior;pb = pb->prior;}while(pa != a){// pb = btmp = pa->data + carry;if (tmp >= 1000){carry = 1;tmp -= 10000;}elsecarry = 0;InsertNodeAtHead(c, tmp);pa = pa->prior;}while(pb != b){// pa = atmp = pb->data + carry;if (tmp >= 1000)4. 调试分析:错误分析:.经常出现忘记符号终止符号,或大小写的小问题导致编译无法通过不安全的设计导致计算机崩溃(无图) 最后结果显示错误1.第一数字输入InputData()2.第2数字输入InputData()输入符号InitList()加入数字InsertNodeAtHead( L,data)加法DualList AddList( a, b)加减法选择同号Add()同号Sub()减法DualList SubList( a, b)结果PrintList(DualList L)正确测试结果:三、设计总结通这次实验让我充分认识到了自己所掌握程序设计知识的贫瘠,在长整的数字的运算之中,在一些数字的长度人可以接受的范围内我们通过用笔列算式、大脑的思考对两个较长的整数进行运算如果计算能力可以的话很快就能得出结果,整个运算的过程简单。

超长整数的加减运算

超长整数的加减运算

超长整数的加减运算哎呀,同学们,你们知道超长整数的加减运算吗?这玩意儿可有趣啦!就说上次吧,我们数学课上老师出了一道超级长的整数加减法题目,那数字长得啊,就像一条看不到尽头的火车!我一看,心里“咯噔”一下,这可咋办呀?我瞅瞅旁边的同桌小明,他也是一脸懵,皱着眉头,嘴里还嘟囔着:“这啥呀,这么长,能算出来吗?”我就跟他说:“怕啥,咱们试试呗!”老师在黑板上写着:“1234567890 + 9876543210”。

这两个数字,一个比一个长,就好像两个巨人在打架,谁也不服谁。

我拿起笔,心里想着,先从个位开始加呗。

个位是0 和0,那简单,还是0 。

十位呢,9 和1,那就是10 ,得往前进一位。

百位呢,8 和2,哎呀,加起来又是10 ,还得进位。

我一边算一边嘀咕:“这也太麻烦了吧,要是数字能自己乖乖排队,一下子就得出结果该多好!”算着算着,我脑袋都有点晕了,感觉这些数字在我眼前跳来跳去,就像一群调皮的小精灵。

再看看前桌的小红,她算得可认真啦,笔在纸上“沙沙”地响。

我忍不住问她:“小红,你算得咋样啦?”小红头也不抬地说:“别打扰我,我快算出来啦!”我心想,哼,她肯定比我厉害。

好不容易,我算是算出了个结果,可又不确定对不对。

我瞅瞅周围的同学,有的抓耳挠腮,有的一脸得意,好像胜券在握。

这超长整数的加减运算,不就像是一场大冒险吗?每一个数字都是一个关卡,你得小心翼翼地通过,一个不小心就会出错。

等到老师公布答案的时候,我的心都提到嗓子眼儿啦!哎呀,还好,我算对啦!那种感觉,就像是在黑暗中走了好久,突然看到了光明,别提多开心啦!我觉得呀,超长整数的加减运算虽然有点难,但是只要我们认真仔细,不怕麻烦,就一定能战胜它!就像爬山一样,虽然过程辛苦,但是当你爬到山顶,看到美丽的风景,就会觉得一切都值得!同学们,你们说是不是呀?。

长整数的加减运算系统说明文档11003601

长整数的加减运算系统说明文档11003601

桂林电子科技大学综合设计说明书用纸《数据结构与算法》课程设计说明书题目:长整数的加减运算学院:计算机科学与工程学院专业:信息安全姓名:xxxxxxxx学号:11003601xx指导教师:张瑞霞老师2013年9 月13 日成绩评定标准及成绩1、能按照格式进行写作,无抄袭现象(10分)2、报告内容行文通畅,有条理性,无错别字,结构严谨。

(10分)3、能够按照数据结构课设的格式要求、排版要求和字数要求等,有需求分析,系统分析,详细设计,关键技术的介绍和参考文献。

(10分)4、在验收过程中,能合理的回答问题(20分)5、软件能正常运行,实现所提出的功能(40分)6、软件代码规范性较好(5分)7、具有自己的创新或特色(5分)总成绩:目录1、前言 (3)2、需求分析 (4)2.1.问题描述: (4)2.2.基本要求: (4)2.3.更高要求: (4)2.4.测试数据: (4)2.5.开发环境 Visual C++6.0(完整绿色版) (5)3、系统概述 (5)3.1.关键技术。

(5)3.2.相关的函数接口 (6)3.3.功能设计 (7)4、系统分析 (7)5、系统的调试与结果 (17)5.1.调试过程出现的问题以及解决方法 (17)5.2.成功的测试数据截图 (17)6、课设小结 (20)7、参考文献: (21)1、前言本系统主要内容是为数据结构长整数加法的实现,所以整个程序是为了实现长整数的加减法运算。

设计一个实现任意长的整数间进行四则运算的程序,要求完成长整数的加运算和减运算。

长整数的长度没有限制,可以是任意长,正确处理好运算之后的进位和借位。

每个结点中可以存放的最大整数为215-1=32767,才能保证两数相加不会溢出。

但若这样存,即相当于按32768进制数存,在十进制数与32768进制数之间的转换十分不方便。

故可以在每个结点中仅存十进制数4位,即不超过9999的非负整数,整个链表视为万进制数。

可以利用头结点数据域的符号代表长整数的符号。

课程设计 长整数四则运算

课程设计 长整数四则运算

课程设计实验报告:1.4 长整数四则运算题目:长整数四则运算一、实验内容【问题描述】设计一个实现任意长的整数进行加法运算的演示程序【基本要求】利用双向循环链表实现长整数的存储,每个结点含一个整形变量。

任何整形变量的范围是-(2^15 - 1)~(2^15 - 1)。

输入和输出形式:按中国对于长整数的表示习惯,每四位一组,组间用逗号隔开。

【实现基本功能】(i)是想长整数的四则运算;(ii)实现长整数的乘方和阶乘运算;(iii)整形量范围是-(2^n-1)~(2^n-1),其中n是由程序读入的参量。

输入数据的分组方法另行规定;【实现加强版本的功能】(i)四则运算在原来版本的基础上支持小数运算,除法还可以通过输入整数后加小数点与相应要求取的精确位数求出精确值,如:求取3666除以7的后三位精确值,可以在输入时将除数输入为3666.000或3666.0000,就能得出相应的精确位数,当然求取后,没有余数的输出;(ii)乘方的功能也进行了强化,支持小数操作;(iii)添加了多个出错处理(即输入重操作)对相应数据输入与输出进行提示;【加强版的实现原理】(i)加减法运算加强:在原来版本的基础上依照基本的加减法操作将数据用小数点进行分隔,记录下连个输入数的小数位长度,并将小数位较短的一个数据后补0直至小数位数相同,然后用函数处理输出的数据;(ii)乘除法、乘方:其处理方法较为简单,主要是记录数据中小数位数的长度,然后通过每种运算方式不同的运算原理截取小数位,再按照输出格式将数据处理进行输出;(iii)根据定义,阶乘保持不变;【特色分析】(i)加强版程序加上了简单的声音提示,无论是输入与输出均会有八个音符的其中之一对输入与输出与否进行提示,同时在输入输出数据出错时,还会用三个音符对重输入进行提示,增强了人性化操作;【测试数据】(1)0;0;应输出“0”。

(2)-2345,6789;-7654,3211;应输出“-1,0000,0000”。

长整数加减运算的精确实现

长整数加减运算的精确实现

长整数加减运算的精确实现
岳国英
【期刊名称】《河北工程技术高等专科学校学报》
【年(卷),期】1999(000)002
【摘要】从存储结构入手,选用动态结构一双向循环链表存储长整数,进而给出了长整数的加、减运算的算法和程序.
【总页数】6页(P14-18,26)
【作者】岳国英
【作者单位】河北工程技术高等专科学校计算机系
【正文语种】中文
【中图分类】TP301.6
【相关文献】
1.任意长整数无误差运算的研究与实现 [J], 张哲;高健
2.长二进制加减运算和长整数四则运算类 [J], 童小明
3.超长整数运算的精确实现 [J], 龚成清
4.用C语言实现超长整数的加减乘除四则运算 [J], 杜丽娟;鞠宏军
5.长整数乘法运算的精确实现 [J], 岳国英
因版权原因,仅展示原文概要,查看原文内容请购买。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

长整数加减的运算一、需求分析问题描述:设计一个实现任意长的整数进行加法运算的演示程序基本要求:利用双向循环链表实现长整数的存储,每个结点含一个整型变量。

任何整型变量的范围是-(2 15 -1)~(2 15 -1)。

输入输出形式:按照中国对于长整数的表示习惯,每四位是一组,组间用逗号隔开更高要求:(1)长整数的减法(2)多个长整数的连续加减法,并带括号等。

具体方式可以参见表达式的求值部分,利用栈测试数据:(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.数据结构此实验采用的数据结构是双向循环链表。

这样可以很容易的找到他的前驱以及它的后继。

节点采用结构体类型,代码如下:typedef struct Node // 双向链表的结构体定义 int data;struct Node *prior;struct Node *next;}DLNode;2.使用函数1)void ListInitiate(DLNode **head)操作结果:初始化一个头结点为head的双向循环链表;2)int ListLength(DLNode *head)操作结果:计算以head为头结点的链表的长度3)int ListInsert(DLNode *head,int i,int x)操作结果:将节点数据为x的节点插到第i个位置上去。

4)int abs(int x)操作结果:绝对值函数,返回x的绝对值。

5)int InputNumber(DLNode *head)操作结果:将从键盘中接收数据并把得到的数据存入以head为头结点的链表中。

四位一存,中间以逗号区分,结束符为分号。

6)void OutputNumber(DLNode *head,int sign)操作结果:将以head为头结点的链表中的所有数据输出到显示屏上,7)void add(DLNode *head1,DLNode *head2,DLNode *head3)操作结果:实现正数加正数的加法操作。

8)int change(DLNode *head1,DLNode *head2)操作结果:判断存在俩个链表中的数的大小,如何head1中的数大于head2中的数那么返回值为0,反之返回值为1,相等时返回值为2;9)void method(DLNode *head1,DLNode *head2,int x)操作结果:计算正数乘以正数的乘法运算。

10)void minus(DLNode *head1,DLNode *head2,DLNode *head3)操作结果:计算正数减正数的减法运算。

11)void yunsuan(DLNode *head1,DLNode *head2,DLNode *head3,char ch)操作结果:正数,负数,加法,减法。

计算式共分为八种运算,在这之前我已经实现了二种运算,那么这个函数就是把这八种运算按照一定的规则转化成已经实现的二种运算来实现完整的加减法运算。

12)void chengfa(DLNode *head1,DLNode *head2)操作结果:在乘法中我只是实现了正数乘以正数的运算,那么这个函数就是通过调用method函数按照一定的规则来实现完整的乘法运算。

13)void main()操作结果:主函数。

调用以上的各个函数来引导用户进行长整数的加法运算,加法运算,乘法运算。

二、详细设计1.数据结构详细设计typedef struct Node // 双向链表的结构体定义int data;struct Node *prior;struct Node *next;}DLNode;双向循环链表的节点由三个部分组成,第一是数据部分data存储此节点的数据,第二是此节点的前驱指针部分*prior指向此节点的前驱,第三是此节点的后继指针部分*next指向此节点的后继。

数据部分我们约定它为整形变量,前驱后继指针均为结构体Node类型。

2.链表初始化函数:void ListInitiate(DLNode **head) //双向链表的初始化if((*head=(DLNode *)malloc(sizeof(DLNode)))==NULL) exit(0);(*head)->prior=*head;(*head)->next=*head;初始化之前需要定义一个类型为Node型的头结点变量,经过函数后完成链表的初始化即:头节点的前驱指针指向自己,同时他的后继指针也指向自己。

3.计算已知的链表长度:int ListLength(DLNode *head) //双向链表的表长DLNode *p=head;int size=0;while(p->next!=head)p=p->next;size++;return size;此函数计算的是已知链表的长度。

主要思想:从头结点开始寻找下一个节点,找到计数器加一。

直到再次寻找到头结点时停止,计算完毕。

4.插入函数:int ListInsert(DLNode *head,int i,int x) //双向链表的数据插入,i表示是插入的第几个元素DLNode *p,*s;int j;p=head->next;j=0;while(p!=head&&j<i)p=p->next;j++;if(j!=i)printf("\n插入位置不合法!");return 0;if((s=(DLNode *)malloc(sizeof(DLNode)))==NULL) exit(0);s->data=x;s->prior=p->prior;//插入p->prior->next=s;s->next=p;p->prior=s;return 1;此函数是已知一双向链表实现在第i个位置插入data为x的节点。

函数需要注意的是在什么位置插入才是合法的,在就是在该节点指针时的顺序不要搞错。

5.绝对值函数:int abs(int x)if(x<0) return -x;else return x;此函数是实现求一个整数的绝对值。

设计这么一个函数主要是考虑到在存储负数的时候头结点应该变为正整数,然后通过其他手段变相实现那种运算。

6.读入数据并插入对应的链表函数:int InputNumber(DLNode *head) //读入输入的数据int input,i=0;//第i个节点char c;scanf("%d%c",&input,&c);while(1)if(input<0&&i==0)//输入数为负且是第一个节点head->data=0;//将长整数的符号保存在头结点中//input=abs(input);//取输入数字的绝对值ListInsert(head,i,input);//插入数据else if(input>=0&&i==0)//输入数为正且是第一个节点head->data=1;//将长整数的符号保存在头结点中ListInsert(head,i,input);//插入数据elseif(head->next->data>=0)ListInsert(head,i,input);//非第一个节点else//input=-1*input;ListInsert(head,i,input);i++;if(c==';') break;//遇到数据输入完成标志,跳出循环scanf("%d%c",&input,&c);return 1;此函数实现的是从键盘上得到数据根据三种情况进行不同的处理,判断是否是头结点,判断是否是整数,判断输入的字符是否是“;”分号。

并且如果是正整数它的头结点data 等于1否则为0。

7.输出函数void OutputNumber(DLNode *head,int sign) //从表尾输出数据元素DLNode *r=head->next;while(r->data==0&&r!=head->prior)r=r->next;if(sign==1)printf("结果是:");elseprintf("结果是: -");printf("%d",r->data);r=r->next;while(r!=head)if(r->data<10)printf(",000");printf("%d",r->data);else if(r->data<100)printf(",00");printf("%d",r->data);else if(r->data<1000)printf(",0");printf("%d",r->data);elseprintf(",%d",r->data);r=r->next;printf("\n");此函数实现的是将最后的结果输出到显示屏上,经过判断数据的正负和数据的范围来进行不同的处理,以保证在显示屏上显示的是正确的格式。

8.不完整加法函数(只可实现正数加上正数)void add(DLNode *head1,DLNode *head2,DLNode *head3){int z=0;int e;DLNode *p1,*p2;p1=head1->prior;p2=head2->prior;while(p1!=head1&&p2!=head2)e=p1->data+p2->data+z;if(e>=10000)z=1;e=e%10000;else z=0;ListInsert(head3,0,e);p1=p1->prior;p2=p2->prior;if(p1==head1&&p2!=head2)while(p2!=head2)e=p2->data+z;if(e>=10000)z=1;e=e%10000;else z=0;ListInsert(head3,0,e);p2=p2->prior;if(z==1) ListInsert(head3,0,z);else if(p1!=head1&&p2==head2){while(p1!=head1)e=p1->data+z;if(e>=10000)z=1;e=e%10000;else z=0;ListInsert(head3,0,e);p1=p1->prior;if(z==1) ListInsert(head3,0,z);else{if(z==1) ListInsert(head3,0,z);此函数实现的是两个正数之间的相加运算,主要的算法和我们手算加法是一样的,首先设置一个进位计数的变量,根据存储的特点从低位开始相加带上进位即可得出相应的位和,最后更新进位变量。

相关文档
最新文档