数据结构长整数四则运算 联系客服

发布时间 : 星期一 文章数据结构长整数四则运算更新完毕开始阅读444a36a126d3240c844769eae009581b6ad9bd55

实习1 1.4长整数四则运算

实习报告

题目:设计一个实现任意长的整数进行加法运算的演示程序。

一、 需求分析

1.本演示程序中,利用双向循环链表实现长整数的存储,每个结点含一个整型变量任何整型变量的范围是-(215-1)—(215-1)。在每个结点中仅存十进制数的4位,即不超过9999的非负整数,整个链表表示为万进制数。输入和输出形式按中国对于长整数的习惯,每四位一组,组间用逗号隔开。

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

(1)构造链表;(2)输入数据;(3)数据处理;(4)结束 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。

二、 概要设计

struct LinkNode //定义结构体LinkNode {

int data; //记录每个节点的整数(小于10000) LinkNode *next; //记录下一个节点的地址 LinkNode *pre; //记录前一个节点的地址 };

class LinkList //定义类LinkList

{ private:

LinkNode *head0,*head1; //head0,head1分别记录两个整数链表的头指针 LinkNode *currptr;

LinkNode *result; //result记录结果链表的头指针 public:

LinkList(); //构造函数,初始化链表 ~LinkList(); //析构函数,释放空间

void Creat(string a); //引入字符串,创立两个链表,分别表示两个整数 void Add(); //实现两个整数相加 void Display(); //显示结果

void addtwo(); //节点多的作为被加数,少的作为加数,实现整 //数绝对值

大的加小的

};

void main() //主函数 { …… do{

} while(Yes_No=='y'||Yes_No=='Y'); //Yes_No不等于'Y'或'y'时,程序退出 }

三、详细设计

#include #include #include using namespace std; struct LinkNode {

int data; //记录每个节点的整数(小于10000) LinkNode *next; //记录下一个节点的地址 LinkNode *pre; //记录前一个节点的地址

};

class LinkList { private:

LinkNode *head0,*head1; //head0,head1分别记录两个整数链表的头指针 LinkNode *currptr;

LinkNode *result; //result记录结果链表的头指针 public:

LinkList(); //构造函数,初始化链表 ~LinkList(); //析构函数,释放空间

void Creat(string a); //引入字符串,创立两个链表,分别表示两个整数 void Add(); //实现两个整数相加 void Display(); //显示结果

void addtwo(); //节点多的作为被加数,少的作为加数,实现整 //数绝对值

大的加小的

};

//链表的实现部分

int sum(int n);

LinkList::LinkList() //构造函数,初始化链表 {

head0=new LinkNode; //申请一个空间记录整数的符号和节点数 head1=new LinkNode; head0->next=head0;

head0->pre=head0; //初始化链表,建立双向循环链表 head1->next=head1; head1->pre=head1;

result=new LinkNode;

result->next=result; result->pre=result; currptr=NULL; }

LinkList::~LinkList() //析构函数,释放空间 {

LinkNode *p1=head0,*p2=head1,*p3=result; //三个指针分别指向三条链表的头指针 while(p1!=p1->pre) {

p1->pre->next=p1->next; p1->next->pre=p1->pre; currptr=p1; p1=p1->next; delete currptr; }

while(p2!=p2->pre) //{

p2->pre->next=p2->next; p2->next->pre=p2->pre; currptr=p2; p2=p2->next; delete currptr; }

while(p3!=p3->pre) {

p3->pre->next=p3->next; p3->next->pre=p3->pre; currptr=p3;

逐个删除节点,释放空间