(完整word版)c++实现任意长整数的四则运算
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验题目:设计一数据结构可处理任意长度的整数
概要设计
1.数据结构的定义
采用双向链表存储任意长整数。双向链表的定义如下:
class DblList {
private:
DblNode *head, *tail;
DblNode *current;
int sign;
public:
DblList(); //构造函数
~DblList(); //析构函数
bool CreatList(string); //生成一个双向链表,存储整数
int GetCount(); //获取整数的长度
void Insert(DblNode *); //从表尾插入一个结点
void InsertFront(DblNode *); //从表头插入
void Clear(); //清除该链表
void operator+(DblList &); //实现两个任意整数的加法
void operator*(DblList &); //实现两个任意整数的乘法
DblList & operator=(DblList &); //重载赋值运算符
int Compare(DblList &); //两个整数的绝对值比较
void Display(); //任意长度整数的标准化输出};
说明:数据的存储,无外乎顺序或者链表。顺序存储时,定义数组无法实现任意长度,而且需要预设一个maxsize,不是特别的方便。所以采用链式存储方式。而且任意长数据通过字符串输入。在链表的每一个结点中,数据域是在该数位上的数字大小。
2.主要功能模块的功能
◆任意长整数的输入
◆任意长整数的标准化输出
◆两个整数的加法
◆两个整数的乘法
三.详细设计(主模块流程图)
五、使用说明及测试结果
1.使用说明:
点击打开应用程序pro1.exe。依次输入任意两个整数(例如123456,
+1234567),按回车,会出现菜单,如下图:
按‘1’则实现两整数的加法
按‘2’则实现两整数的乘法
按‘#’结束
注:菜单可重复出现直至‘#’退出。实现加法,乘法如下图:
2.测试结果:
(1) 123456
(2) +1234567
(3) -987654321
(4) 12a3
(5)+
注:当输入错误时,允许重新输入。
六、源程序
/* 主函数*/
/***************************************************/
#include "cal.h"
void main(){
string s;
string p;
DblList list1;
while(1){ //输入错误时,允许重新输入cout<<"Input num1"< cin>>s; bool ok1=list1.CreatList(s); if (!ok1) { cout<<"error!"< } else{ cout<<"num1:"; list1.Display(); break; } } DblList list2; while(1){ cout<<"Input num2:"< cin>>p; bool ok2=list2.CreatList(p); if (!ok2) { cout<<"error!"< } else{ cout<<"num2:"; list2.Display(); break; } } string choose; while (1) { cout<<"请选择运算法:"< cout<<"--------------------------"< cout<<"|1.num1+num2 |"< cout<<"|2.num1*num2 |"< cout<<"|#.exit |"< cout<<"--------------------------"< while (1) { cin>>choose; if (choose=="1") { list1+list2; break; } else if (choose=="2") { list1*list2; break; } else if (choose=="#") { return; } else { cout<<"输入有误,请重新输入!!"< continue; } } } } /*头文件,包括长整数数据结构的定义,成员函数的定义*/ /***********************************************************/ #include #include #include using namespace std; struct DblNode{ int data; DblNode * prior; DblNode * next; }; bool IsNum(char a){ //判断字符a是否是便是数字int s=a-'0'; if(s>=0&&s<10) return true; else return false; } bool IsInt(string a){ //判断字符串a是否表达一串数字bool Jud=1; int i=1; char s=a[0]; if (a=="+"||a=="-") return false; if (s=='+'||s=='-') {} else if (s>='1'&&s<='9'){} else if (a[0]=='0'&&a[1]=='\0') return true; else return false; while (a[i]!='\0') { Jud=IsNum(a[i]); if (Jud==0) return false; i++; } return true; } int JudSign(string s){ //返回数字的符号 if (s[0]=='-') return -1; else if(s[0]=='0'&&s[1]=='\0') return 0; else return 1; } int CtoI(char a){