长整数运算说明书汇编

合集下载

数据结构课程设计长整数四则运算

数据结构课程设计长整数四则运算

数据结构课程设计题目:长整数四则运算班级学号学生姓名提交日期成绩计算机与通信工程学院长整数四则运算一需求分析:问题描述:设计一个实现任意长的整数进行加法运算的演示程序。

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

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

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

在现实生活中有很多地方,例如航空航海、生物医疗等等方面,都需要很大的数来表示,这些用int甚至长整型long long都是远不够的,所以需要有一种算法来解决这种大数的表示和运算。

该问题只要求了大数的相加运算。

二详细设计:大致思路:【存储】用两个链表,每个节点保存一位数,在链表头保存数的正负,正数保存1,负数保存-1,如果是正数,后面每一位都储存正数,负数每一位都储存负数,数字按照链表头到链表尾从高位到低位的顺序;【相加】从两个链表的尾部开始同步向前相加,加完存到第一个链表,第二个加完的结点销毁,会存在两个链表不一样长的情况,没加的直接连到链表的前面,最高位的符号存到链表的头;【调整】根据表头的符号,调整后面的数字的值,中间会产生进位或者退位的问题,各个节点的符号不一定相同,但对于正负数都可以建立同样的调整模式,将正负到tmp中(1或-1)加或者减(tmp*10),然后对前一位加或者减tmp*1即可。

第一位保留符号不变,这样不用处理多余的进位,也就不用再产生新的节点,也不用保存符号。

【输出】从前到后遍历已经处理好的表,将每一位进行输出就可以了。

结构体定义struct Node{Node *pre;Node *next;int data;};功能函数void Input(Node *p,Node *t)//处理输入和保存void disply(Node *h,Node *t,int l)//输出void add(Node *h1,Node *t1,Node *h2,Node *t2)//每一位相加int adjust(Node *h,Node *t)//将各个位的正负、大小、进位进行调整源程序:。

长整数运算说明书.

长整数运算说明书.

目录摘要1前言2 1.采用类C语言定义相关的数据类型3 3函数的调用关系图164.调试分析165.测试结果17 6.源程序(带注释)21总结35参考文献37致谢38附件Ⅰ部分源程序代码39摘要该设计要求学生设计程序,实现两个任意长的整数求和及差的运算问题。

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

关键词:数据结构;长整数;运算问题;C语言前言在计算机及相关专业众多的基础课程里面,算法与数据结构是基础而又十分重要的课程。

本学期开设的《算法与数据结构》课程,在学习科目的第一节课起,张老师就为我们阐述了它的重要性。

它对我们来说具有一定的难度。

它是其它编程语言的一门基本学科。

尽管不好学,但是我们必须学好这门课程,这对于我们计算机专业的学生来说意义重大。

经过一个学期的理论知识的学习,对于数据结构相关的知识有了一定的了解。

这是一门纯属于设计的科目,它需用把理论变为上机调试和具体实践。

在课程结束之后。

老师为我们安排了这次为期两周的课程设计。

目的就是让我们自己在计算机上自己设计算法来实现相应的功能以及锻炼学生的动手能力和实践能力,最重要的是要把我们所学的数据结构的理论知识应运到实践中去。

这次课程设计的题目是“长整数运算”,要求学生自己查阅相关资料,完成相应的任务,自己上机设计算法,调试程序,运行出结果,以此来加深理解线性表、查找表的逻辑结构、存储结构,掌握查找、排序等基本运算的实现,进一步理解和熟练掌握课本中所学的各种数据结构,学会如何把学到的知识用于解决实际问题,培养自己的动手能力。

正文1.采用类c语言定义相关的数据类型#include<stdio.h>#include<malloc.h>typedef struct dnode{int data;//头节点的data域保存数的正负。

易语言长整数位运算

易语言长整数位运算

易语言长整数位运算
在易语言中,长整数位运算是指对超出整数范围的数进行位运
算操作。

在易语言中,长整数通常是指超出了32位整数范围的数值,需要使用特定的函数和操作符来进行位运算操作。

易语言中提供了一些函数和操作符来进行长整数位运算,其中
包括位与(&)、位或(|)、位异或(^)、位取反(~)等操作符。

这些操作符可以用来对长整数进行按位与、按位或、按位异或、按
位取反等操作。

另外,易语言还提供了一些函数来进行长整数位运算,比如GetBit、SetBit、ClearBit等函数,这些函数可以用来获取指定位
的值、设置指定位的值、清除指定位的值等操作。

除了上述的基本位运算操作外,易语言还提供了一些高级的位
运算函数,比如位移操作(<<、>>)、循环左移、循环右移等操作,这些函数可以用来对长整数进行位移操作,实现乘以2的幂、除以
2的幂等操作。

总之,在易语言中,长整数位运算可以通过操作符和函数来实
现,开发者可以根据实际需求选择合适的方法来进行位运算操作,从而实现对长整数的位运算需求。

数据结构综合实训长整数四则运算

数据结构综合实训长整数四则运算

4
长整数四则运算实现
长整数四则运算实现
加法
对于加法,我们需要从低位到高位依次相加。如果结果大于等于10,我们需要进位。我们 可以使用链表或数组来实现这个算法
链表加法示例代码(Python)
THANK YOU
2
数据结构选择
数据结构选择
链表
链表是一种动态数据结构,可以根据需要随时增加或减少节点。链表中的每个节点包含两 部分:数据和指向下一个节点的指针。使用链表可以方便地实现长整数的每一位的存储和 操作
数据结构选择
数组
数组是一种静态数据 结构,其大小在创建 时确定,不能更改。 对于长整数,我们可 以使用数组来表示每 一位数字,从而实现 大数的存储和运算
20XX
数据结构综合实训 -长整数四则运算
时 间:20XX-XX-XX
-
1 2 3 4
1
引言
引言
在计算机科学中,长整数四则运算是一 个经典问题
由于计算机的整数类型通常有固定的范 围,在进行大数运算时,必须采用特殊 的数据结构和技术来处理
本实训将介绍如何使用链表和数组来实 现长整数的表示和四则运算
数据结构选择
3
长整数表示
长整数表示
链表表示法
我们可以将长整数表示为一个链表,其中 每个节点存储一个数字(0-9)。例如,数 字123可以表示为1->2->3。链表的头部表 示整数的低位,尾部表示高位
长整数表示
数组表示串中的每个字符存储在数 组的一个元素中。例如,数字123可以表示为array [ 0]=1, array [ 1]=2, array [ 2]=3

长整数四则运算

长整数四则运算

山东理工大学计算机学院课程设计(数据结构)班级计科0503班姓名王新政学号0512105988指导教师肖爱梅张艳华二○○七年七月十三日课程设计任务书及成绩评定课题名称长整数四则运算Ⅰ、题目的目的和要求:设计中要求综合运用所学知识,上机解决一些与实际应用结合紧密的、规模较大的问题,通过分析、设计、编码、调试等各环节的训练,使学生深刻理解、牢固掌握数据结构和算法设计技术,掌握分析、解决实际问题的能力。

通过这次设计,要求在数据结构的逻辑特性和物理表示、数据结构的选择和应用、算法的设计及其实现等方面,加深对课程基本内容的理解。

同时,在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。

Ⅱ、设计进度及完成情况Ⅲ、主要参考文献及资料[1]严蔚敏,吴伟民主编. 《数据结构》(C语言版).清华大学出版社. 2002[2] 殷人昆等著. 《数据结构》(C++版). 清华大学出版社. 2001[3] 金远平著. 《数据结构》(C++描述). 清华大学出版社. 2005[4] Frank M.Carrano 等著. 《数据结构与C++高级教程》.清华大学出版社. 2004[5] 严蔚敏,吴伟民主编. 《数据结构习题集》(C语言版).清华大学出版社. 2002学科部主任___________(签字)Ⅳ、成绩评定:设计成绩:(教师填写)指导老师:(签字)二○○七年七月十三日目录第一章概述 (1)第二章系统分析 (2)第三章概要设计 (3)第四章详细设计与源程序 (4)第五章调试过程中的问题及系统测试情况 (12)第六章结束语 (13)参考文献 (14)第一章概述课程设计是实践性教学中的一个重要环节,它以某一课程为基础,可以涉及和课程相关的各个方面,是一门独立于课程之外的特殊课程。

课程设计是让同学们对所学的课程更全面的学习和应用,理解和掌握课程的相关知识。

《数据结构》是一门重要的专业基础课,是计算机理论和应用的核心基础课程。

长整数运算说明书

长整数运算说明书
do
{scanf("%s",&ch1);
if(ch1=='+'||ch1=='-')
{yunsuan(a,b,c,ch1);
OutputNumber(c,1);
break;
}
else
{printf("\n此版本不支持%c运算!是否重新输入运算符?(y/n):",ch1);
scanf("%s",&m);
2.本程序中,集合的元素限定为数字字符[‘0’~’9’]和字பைடு நூலகம்‘,’与‘;’,输入字符可以任意长,输入形式以“回车符”为结束标志,串中字符顺序不限,且允许出现重复字符。
3.现实长整数的分组存储,每个结点含一个整形变量。输入的形式以回车结束,可以直接输入正数或负数。按中国对于长整数的表示习惯,每四位一组,除数字和位于首位置的负号外,其它一切字符都将作为分隔符,连续多个分隔符当一个处理。但不使用分隔符也不影响结果。
操作结果:将以head为头结点的链表中的所有数据输出到显示屏上。
void add(DLNode *head1,DLNode *head2,DLNode *head3)
操作结果:实现正数加正数的加法操作。
int change(DLNode *head1,DLNode *head2)
操作结果:判断存在俩个链表中的数的大小,如何head1中的数大于head2中的数那么返回值为0,反之返回值为1,相等时返回值为2。
if(m=='Y'||m=='y'){ n=2;printf("\n请输入运算符'-'或'+':");}

长整数的加减运算

长整数的加减运算

*******************实践教学*******************兰州理工大学技术工程学院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)的计算机上都能有效地运行。

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

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

《数据结构》课程设计报告课程设计报告名称长整数的加法运算实验室实验楼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)正确测试结果:三、设计总结通这次实验让我充分认识到了自己所掌握程序设计知识的贫瘠,在长整的数字的运算之中,在一些数字的长度人可以接受的范围内我们通过用笔列算式、大脑的思考对两个较长的整数进行运算如果计算能力可以的话很快就能得出结果,整个运算的过程简单。

长整数的加减运算系统说明文档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”。

长整数乘法

长整数乘法

长整数乘法
长整数乘法是指对两个或多个长整数进行相乘的运算。

具体地说,乘法是一种数学运算,将两个或多个数相乘得到一个乘积。

在长整数乘法中,乘数可以是任意长度的整数,而乘积的长度可能会比较大。

长整数乘法的步骤如下:
1. 将每个数从低位开始逐个取出,并分别与另一个数的每一位相乘。

2. 将每次的乘积相加,并按照十进制的规则进行进位。

3. 重复以上步骤,直到将所有位数相乘完毕。

在进行长整数乘法时,需要注意以下几点:
1. 注意进位:乘法运算中可能会出现大于9的结果,这就需要将进位加到下一位的计算中。

2. 注意对齐:为了方便计算,需要将两个乘数的位数对齐,这样才能逐位相乘。

3. 注意结果的位数:乘积的位数可能会比较大,需要注意计算结果的进位情况。

长整数乘法可以在计算器、编程语言中实现,可以通过循环和条件判断来逐位相乘并计算乘积。

在实际应用中,长整数乘法常被用于处理大数的乘法运算,例如在密码学、数据处理等领域。

长整数运算实验报告

长整数运算实验报告

一、实验目的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中的表示方法。

长整数乘法

长整数乘法

题目:长整数乘法班级:姓名:学号:完成日期:1:需求分析(1) 输入的形式和输入值的范围:用户从键盘输入2个任意长度的长整数,输入的时候是按4个为一段输入的,即一段一段输入的,求它们的乘积的大小,并将结果在屏幕上显示;2个长整数的输入没有大小的限制,要输入多大的数据,就可以输入多大的数据.(2) 输出的形式:输出直接在屏幕上显示2个任意长度的长整数的乘积大小(3) 程序所能达到的功能:对于用户输入的任意长度的2个的长整数,能够正确没有错误的显示结果,和电脑附件中的计算器的计算值要一致;能够准确无误地显示结果(4) 测试数据如输入1000 1000 和1111 2个长整数后,显示0111 1111 1111 1000的话,就是正确的结果形式;如输入1111 1111 1111和1111 2个长整数后,结果显示0123 44444444 4322就不是正确结果,因为这2个长整数的积为0123 4444 444443212:概要设计a:抽象数据类型的定义为了实现任意长整数的乘法,因为这种运算存在进位和位移等操作,因此选择双链表的结构体,它有一个data,left,right;考虑到data表示的数据的范围,使它只接受4个数字的整数,这样一个长整数就分为若干段,每一段为4个数字,便于进位和借位以及位移的操作,用户在输入时就是每次输入4个数字. b:主程序的流程主程序是首先调用初始化2个长整数的函数,用户4个数字一段一段地输入2个长整数,用双链表的形式和头插法的形式建立,返回2个长整数的头节点; 建立完2个长整数后,就开始进行2个长整数的乘积的运算了;首先将第一个长整数的全部去乘第2个长整数的最后一段,这样得到一个长整数;接着将第一个长整数的全部去乘第2个长整数的倒数第2段,这样得到一个长整数,但是要向左位移4位; 这次得到的长整数要和上一次相加,得到一个新的长整数;接着接着将第一个长整数的全部去乘第2个长整数的倒数第3段,得到一个长整数,再和前面相加; 依次进行,一直到已经到第一个长整数的全部乘于了第2个长整数的最高1段, 那么乘法就结束了;这时将得到的长整数从高位到低位一段一段,4个4个数字显示在屏幕上,程序就运行结束了.c:模块之间的层次(调用)关系程序的调用关系如下:主函数调用了初始化2个长整数的函数,然后再调用了2个2个长整数的乘积的函数;2个长整数的乘积的函数调用了部分求和的函数和从表头得到表尾的函数,以及将一个长整数前后数值交换的函数以及显示一个长整数的函数.3.详细设计a:2个长整数的输入接着采用头插法的方式,当输入一个4个数字的整数时,就产生一个新的节点,它的值为输入的整数值,建立起它的左右指针,并用头节点指向它;为了判断一个长整数是否输入结束,定义一个结束标志,当输入正数时就继续,当输入负数时,就结束一个长整数的输入;同时用一个函数得到长整数的尾节点和段数,段数在比较2个数的大小有用。

长整数四则运算实验报告

长整数四则运算实验报告

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

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

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

任何整形变量的范围是-(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);}}六、技巧与体会在编写程序中尽量做到独立完成、对于自己想要完成的问题要主动编程完成、这样自己是一个很大的提升、也能学到很多的知识、熟练编程!以后要加强动手时间能力、多与同学交流算法精髓!。

超长正整数加法和乘法报告书

超长正整数加法和乘法报告书

信息工程学院数据结构与C语言综合训练报告(2011~2012学年第二学期)报告题目:____超长正整数的加法________姓名:______李莉_______专业:信息管理与信息系统年级班级: ____112班________指导教师:__李宏利、张晶___完成日期:_2012年7月12日一、综合训练目的和要求本综合训练是计算机科学与技术、信息管理与信息系统、软件工程、电子商务专业重要的实践性环节之一,是在学生学习完《程序设计语言(C)》、《数据结构》课程后进行的一次全面的综合练习。

本课综合训练的目的和任务:1. 巩固和加深学生对C语言、数据结构课程的基本知识的理解和掌握2. 掌握C语言编程和程序调试的基本技能3. 利用C语言进行基本的软件设计4. 掌握书写程序设计说明文档的能力5. 提高运用C语言、数据结构解决实际问题的能力二、综合训练任务内容利用双向循环链表,设计一个实现任意长的整数进行加法运算的演示程序。

要求输入和输出每四位一组,组间用逗号隔开。

如:1,0000,0000,0000,0000。

提高要求:完成两个超长正整数的乘法。

三、总体设计函数调用关系图(如下)mainAdd() Output() Input() Change() Mul()Sum()函数的流程图(如下)Y NYNNY开始m=0操作说明 输入字符串a[] Input() n=N输入n 输入字符串b[] Input() n=N ’输入n Change(a) Change(b) 输入mMul()Add()四、详细设计说明主函数模块包括判断函数输入模式是否正确的模块,输入转换模块,数值计算模块和输出模块。

在主函数中首先调用函数Input (),然后调用到函数Change (),在Change ()函数中调用了函数Sum (),随后主函数中又根据操作者调用了函数Add ()或者函数Mul (),最后主函数调用了函数Output ()后程序结束。

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

摘要数据结构课程设计,要求学生在数据结构的逻辑特性和物理表示、数据结构的选择和应用、算法的设计及其实现等方面,加深对课程基本内容的理解。

同时,在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。

而在一般的程序运算中,长整数是无法计算的,因为计算机一次能够运算的位数是有限,一旦整数很长,就需要一个程序来进行多次计算,通过长整数运算这个程序,可一把一个长整数分成多个普通整数来进行计算,使得长整数也可以进行运算。

我编写的这个程序就可以进行长整数的加减运算,各个数据也可以是负数。

关键词:长整数;运算;加法;减法AbstractData structure course design, students in the logical characteristics and physical data structure for the representation of the design, selection and application of data structure, algorithm and its realization, deepen the understanding of basic content of courses. At the same time, by the systematic and rigorous training in basic skills program design method and the operation and scientific style of work. But in the general program operation, long integers can not be calculated, because the computer time to operation number is limited, once the integer is long, need a program to calculate several times, operation of this program through the long integer, can put a long integer into a plurality of ordinary integers to calculate, the long integer can be calculated. This program I wrote to long integer addition and subtraction, all data can be negative.Keywords: long integer; arithmetic; additive; subtraction目录1概述 (1)1.1题目内容 (1)1.2需求分析 (1)1.3设计要求 (1)2概要设计 (3)2.1设计分析 (3)2.2功能模块介绍 (3)2.3函数介绍 (4)2.4数据结构介绍 (5)3详细设计 (6)3.1程序流程介绍 (6)3.2函数功能介绍 (6)3.2.1主函数 (6)3.2.2插入函数 (8)3.2.3读入数据并插入对应的链表函数 (9)3.2.4输出函数 (10)3.2.5加法函数 (10)3.2.6判断俩正数大小函数 (12)3.2.7 减法函数 (13)4调试分析 (15)4.1使用说明 (15)4.2测试结果 (15)5总结 (19)参考文献 (20)致谢 (21)附录 (22)1概述1.1题目内容题目:长整数运算内容:使用双向循环链表存储长整数,每个结点含一个整型变量,主要功能有:长整数输入(建立双向循环链表)、长整数的加法、长整数的减法及结果的显示输出等。

1.2需求分析1.本程序实现计算任意长的整数的加法运算. 以用户和计算机对话的方式,即在计算机终端上显示“提示信息”之后,由用户在键盘上输入演示程序中规定的运算命令,然后程序就计算并显示出这两个数的运算。

2.本程序中,集合的元素限定为数字字符[‘0’~’9’]和字符‘,’与‘;’,输入字符可以任意长,输入形式以“回车符”为结束标志,串中字符顺序不限,且允许出现重复字符。

3.现实长整数的分组存储,每个结点含一个整形变量。

输入的形式以回车结束,可以直接输入正数或负数。

按中国对于长整数的表示习惯,每四位一组,除数字和位于首位置的负号外,其它一切字符都将作为分隔符,连续多个分隔符当一个处理。

但不使用分隔符也不影响结果。

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

1.3设计要求该设计要求设计程序,实现两个任意长的整数求和及差的运算问题。

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

详细要求:(1)至少要用10组测试数据,算法对于这些合法的输入数据都能产生满足规格说明要求的结果;(2)算法对于精心选择的典型、苛刻而带有刁难性的几组输入数据能够得出满足规格说明要求的结果;对算法实现过程中的异常情况能给出有效信息;(3)任何整型变量的范围是-(215-1)~(215-1)。

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

其中,n是由程序读入的参量。

2概要设计2.1设计分析我们首先要考虑的是如何表示长整型数。

按照传统习惯要求每4位数形成1组,而一个长整型数可能会有很多组这种4位数,而每节之间是有先后顺序的,因此我们可以考虑用数组和链表来存储数据。

(1)再考虑到每个长整型数的长度在输入之间是无法预知的,因此使用链表在存储空间的分配上更方便一些。

(2)在输入数据时总是从高位到低位地存储,而计算时总是从低位向高位运算,因此采用双向链表更方便,而为了从头结点方便地转到尾结点可以采用循环链表。

总之,为了实现上述功能,应以双向循环链表表示长整数,每个结点含一个整型变量,且仅绝对值不超过9999的整数,整个链表用十进制数表示。

(3)对于每一个长整型数可以设置一个头结点,其中的数据域用来表示该长整型数的正负号及组数,该值的符号则表示该长整型数的符号,该数的绝对值表示该长整型数包含的4位数的组数。

第一个存储4位数据组的结点称为首结点,而最后一个4位数据组结点称为尾结点。

为此需要两个结构数据类型:双向循环链表和长整数,两个类型采用相同的结构,只是双向循环链表用来存储数据,长整型用表示数据的运算。

利用双向循环链表来实现对长整数的存储。

选择该数据结构来完成长整数的加减运算是因为要对长整数进行运算,需要对长整数进行存储,所以选择用链表对长整数存储,又由于存储的顺序是从左到右,而运算的顺序则是从右到左,这样位了操作方便选择循环链表,在运算过程中有进位和借位的操作,所以最终选择双向循环链表的数据结构。

2.2功能模块介绍该程序主要由以下几大模块组成:1.主程序模块:主要实现对个模块的调用和界面的管理,提示用户,帮助用户快速准确的完成运算。

2.双向循环链表处理模块:实现对数据的存储、管理,主要由void ListInitiate、int ListLength等函数组成。

3.长整型数的输入输出模块:主要由void OutputNumber、int InputNumber 等函数组成,实现数据的输入。

4.长整数运算模块:主要由void add、int change 、int change等函数组成。

也就是函数void yunsuan(DLNode *head1,DLNode *head2,DLNode*head3,char ch)实现的是正数,负数,加法,减法。

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

程序功能模块图如图2.1所示。

主程序模块长整数运算模块长整数输入输出模块双向循环链表单元模块图2.1功能模块图2.3函数介绍void ListInitiate(DLNode **head)操作结果:初始化一个头结点为head的双向循环链表。

int ListLength(DLNode *head)操作结果:计算以head为头结点的链表的长度。

int ListInsert(DLNode *head,int i,int x)操作结果:将节点数据为x的节点插到第i个位置上去。

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

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

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

void OutputNumber(DLNode *head,int sign)操作结果:将以head为头结点的链表中的所有数据输出到显示屏上。

void add(DLNode *head1,DLNode *head2,DLNode *head3)操作结果:实现正数加正数的加法操作。

int change(DLNode *head1,DLNode *head2)操作结果:判断存在俩个链表中的数的大小,如何head1中的数大于head2中的数那么返回值为0,反之返回值为1,相等时返回值为2。

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

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

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

2.4数据结构介绍本次课设所使用的数据结构双向循环链表的节点由三个部分组成,第一是数据部分data存储此节点的数据,第二是此节点的前驱指针部分*prior指向此节点的前驱,第三是此节点的后继指针部分*next指向此节点的后继。

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

代码如下:typedef struct Node // 双向链表的结构体定义{ int data;struct Node *prior;struct Node *next;}DLNode;3详细设计3.1程序流程介绍由上面的提到的主程序、长整数运算、长整数输入输出、双向循环链表等几个主要模块,可得到程序运行图如下:Y N图3.1主程序流程图3.2函数功能介绍3.2.1主函数主要的作用是为用户做一个提示,如何完成自己想要的运算。

相关文档
最新文档