c++实现任意长整数的四则运算Word文档格式.docx

上传人:b****7 文档编号:21761007 上传时间:2023-02-01 格式:DOCX 页数:17 大小:87.82KB
下载 相关 举报
c++实现任意长整数的四则运算Word文档格式.docx_第1页
第1页 / 共17页
c++实现任意长整数的四则运算Word文档格式.docx_第2页
第2页 / 共17页
c++实现任意长整数的四则运算Word文档格式.docx_第3页
第3页 / 共17页
c++实现任意长整数的四则运算Word文档格式.docx_第4页
第4页 / 共17页
c++实现任意长整数的四则运算Word文档格式.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

c++实现任意长整数的四则运算Word文档格式.docx

《c++实现任意长整数的四则运算Word文档格式.docx》由会员分享,可在线阅读,更多相关《c++实现任意长整数的四则运算Word文档格式.docx(17页珍藏版)》请在冰豆网上搜索。

c++实现任意长整数的四则运算Word文档格式.docx

所以采用链式存储方式。

而且任意长数据通过字符串输入。

在链表的每一个结点中,数据域是在该数位上的数字大小。

2.主要功能模块的功能

◆任意长整数的输入

◆任意长整数的标准化输出

◆两个整数的加法

◆两个整数的乘法

三.详细设计(主模块流程图)

5、使用说明及测试结果

1.使用说明:

点击打开应用程序pro1.exe。

依次输入任意两个整数(例如123456,+1234567),按回车,会出现菜单,如下图:

按‘1’则实现两整数的加法

按‘2’则实现两整数的乘法

按‘#’结束

注:

菜单可重复出现直至‘#’退出。

实现加法,乘法如下图:

2.测试结果:

(1)123456

(2)+1234567

(3)-987654321

(4)12a3

(5)+

当输入错误时,允许重新输入。

6、源程序

/*主函数*/

/***************************************************/

#include"

cal.h"

voidmain(){

strings;

stringp;

DblListlist1;

while

(1){//输入错误时,允许重新输入

cout<

<

"

Inputnum1"

endl;

cin>

>

s;

boolok1=list1.CreatList(s);

if(!

ok1)

{

cout<

error!

}

else{

num1:

;

list1.Display();

break;

}

DblListlist2;

while

(1){

Inputnum2:

p;

boolok2=list2.CreatList(p);

ok2)

num2:

list2.Display();

stringchoose;

while

(1)

{

请选择运算法:

--------------------------"

/*菜单*/

|1.num1+num2|"

/*可以重复输入运算符,按'

#'

退出*/

|2.num1*num2|"

|#.exit|"

while

(1)

{

cin>

choose;

if(choose=="

1"

{

list1+list2;

break;

}

elseif(choose=="

2"

list1*list2;

elseif(choose=="

#"

return;

else

输入有误,请重新输入!

continue;

}

/*头文件,包括长整数数据结构的定义,成员函数的定义*/

/***********************************************************/

#include<

iostream>

string>

cmath>

usingnamespacestd;

structDblNode{

intdata;

DblNode*prior;

DblNode*next;

boolIsNum(chara){//判断字符a是否是便是数字

ints=a-'

0'

if(s>

=0&

&

s<

10)returntrue;

elsereturnfalse;

boolIsInt(stringa){//判断字符串a是否表达一串数字

boolJud=1;

inti=1;

chars=a[0];

if(a=="

+"

||a=="

-"

)returnfalse;

if(s=='

+'

||s=='

-'

){}

elseif(s>

='

1'

9'

){}

elseif(a[0]=='

a[1]=='

\0'

)returntrue;

while(a[i]!

{

Jud=IsNum(a[i]);

if(Jud==0)returnfalse;

i++;

returntrue;

intJudSign(strings){//返回数字的符号

if(s[0]=='

)return-1;

elseif(s[0]=='

s[1]=='

)return0;

elsereturn1;

intCtoI(chara){

inti=a-'

returni;

classDblList{//定义一个双向链表类,存储任意长度的数字

//并可以进行标准化输出和加法,乘法。

//生成一个双向链表

//从表头插入一个结点

voidDisplay();

DblList:

:

DblList(){

head=newDblNode();

head->

next=NULL;

prior=NULL;

tail=head;

current=NULL;

sign=0;

~DblList(){//析构函数

while(head->

next!

=NULL)

current=head->

next;

head->

next=current->

deletecurrent;

deletehead;

head=NULL;

tail=NULL;

intDblList:

GetCount(){//返回该数字的长度(不包括符号位)

intcount=0;

while(current)

count++;

current=current->

returncount;

voidDblList:

Insert(DblNode*p){//从链表尾部插入一个结点

tail->

next=p;

p->

prior=tail;

tail=p;

InsertFront(DblNode*q){//从链表头部插入一个结点

if(head->

next==NULL)

next=q;

q->

prior=head;

tail=q;

else{

next=head->

next->

prior=q;

boolDblList:

CreatList(strings){//输入的任意长度的表示数字的字符串

boolj=IsInt(s);

//以此生成双向链表

if(!

j)returnj;

inti=0;

sign=JudSign(s);

if(s[0]=='

||s[0]=='

)i++;

while(s[i]!

intia=CtoI(s[i]);

current=newDblNode();

current->

data=ia;

current->

Insert(current);

i++;

current=NULL;

returntrue;

Clear(){

next)

Compare(DblList&

s){//任意两个长度数字绝对值比较

inta=GetCount();

intb=s.GetCount();

if(a>

b)return1;

elseif(a<

b)return-1;

else

s.current=s.head->

while(current!

intre=current->

data-s.current->

data;

if(re>

0)return1;

elseif(re<

0)return-1;

else

current=current->

s.current=s.current->

current=NULL;

s.current=NULL;

return0;

DblList&

DblList:

operator=(DblList&

s){

Clear();

sign=s.sign;

s.current=s.head->

while(s.current!

current=newDblNode();

current->

data=s.current->

Insert(current);

s.current=s.current->

s.current=NULL;

return*this;

operator+(DblList&

s){//实现加法(包括减法)

DblListtemp;

intda;

intf=0;

intsi=Compare(s);

if(si==0&

(sign+s.sign==0))temp.sign=0;

if(si==0)temp.sign=sign;

elseif(si>

0)temp.sign=sign;

elsetemp.sign=s.sign;

current=tail;

s.current=s.tail;

if(current==head&

s.current==s.head)

if(f)

{

da=f;

temp.current=newDblNode();

temp.current->

data=f;

temp.InsertFront(temp.current);

}

if(!

f)break;

f=0;

elseif(current!

=head&

s.current==s.head)

temp.current->

data=current->

data+f;

temp.InsertFront(temp.current);

prior;

elseif(current==head&

s.current!

=s.head)

s.current=s.current->

da=current->

data*sign+s.current->

data*s.sign+f;

if(da*temp.sign>

=10)

da=da-10*temp.sign;

f=temp.sign;

elseif(da*temp.sign<

0)

da=da+10*temp.sign;

f=-temp.sign;

elsef=0;

temp.current=newDblNode();

data=abs(da);

temp.current=temp.head->

if(temp.current!

while(temp.current->

data==0)

temp.head->

next=temp.current->

deletetemp.current;

temp.current=temp.head->

temp.current=NULL;

cout<

num1+num2="

temp.Display();

operator*(DblList&

s){//实现乘法

intcf=0;

intans;

inti,j;

temp.sign=sign*s.sign;

inta1=GetCount();

inta2=s.GetCount();

inta=a1+a2;

for(i=0;

i<

a;

i++)

temp.current=newDblNode();

temp.current->

data=0;

temp.InsertFront(temp.current);

s.current=s.tail;

=s.head){

current=tail;

temp.current=temp.tail;

for(i=0;

count;

i++)temp.current=temp.current->

for(j=0;

j<

a1;

j++){

ans=s.current->

data*current->

data+temp.current->

data+cf;

data=ans%10;

cf=ans/10;

current=current->

temp.current=temp.current->

if(cf!

=0)

data=temp.current->

cf=0;

if(temp.head->

temp.current=NULL;

}

num1*num2="

Display(){//任意长数字的标准化输出

intcount=GetCount();

if(sign==0)

0"

return;

elseif(sign==-1)cout<

while(current!

{

if(count>

0){

current->

count--;

if(count%3==0&

count!

=0)cout<

"

--------------------------------------------------------------"

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 工作计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1