字符链栈实现大整数加法 有有关问题请问
字符链栈实现大整数加法 有问题请教
#include <iostream>
using namespace std;
typedef char SElemType;
typedef int Status;
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define MAXSIZE 1000
#define TRUE 3
#define FALSE -3
typedef struct StackNode { //链栈定义
SElemType data;
struct StackNode *next;
} StackNode, *LinkStack;
LinkStack S;
Status InitStack(LinkStack &S ) //链栈初始化
{
S=NULL;
return OK;
}
Status StackEmpty(LinkStack S) //判断是否为空
{
if (S==NULL) return TRUE;
else return FALSE;
}
Status Push(LinkStack &S , SElemType e) //进栈
{
StackNode *p;
p=new StackNode;
if(!p) exit(OVERFLOW);
p->data=e;
p->next=S;
S=p;
return OK;
}
Status Pop (LinkStack &S,SElemType &e) //出栈
{
StackNode *p;
if (S==NULL) return ERROR;
e=S->data;
p=S;
S=S->next;
delete p;
return OK;
}
SElemType GetTop(LinkStack S) //取栈顶元素
{
if (S==NULL) exit(ERROR);
else return S->data;
}
Status getall(LinkStack S) //输出所有元素
{
char a;
if (S==NULL) exit(ERROR);
while(S!=NULL)
{ a=GetTop(S);
cout<<a;
S=S->next;
}
cout<<endl;
return OK;
}
Status add(LinkStack i,LinkStack j,LinkStack &k) //相加
{
char a,b,c;
int d,e;
e=0;
d=0;
while(i!=NULL||j!=NULL)
{
if(i!=NULL)
{ a=GetTop(i);
i=i->next;
}
else a='0';
if(j!=NULL)
{ b=GetTop(j);
j=j->next;
}
else b='0';
if(d==0) e=(a-48)+(b-48);
else e=(a-48)+(b-48)+1;
if(e>=10)
{ d=1;
e=e-10;
c=e+48;
Push(k,c);
}
else
{ d=0;
c=e+48;
Push(k,c);
}
}
return OK;
}
void creat(LinkStack &l)
{ char a;
cout<<"请输入数据:";
while((a=getchar())!='\r')
{ Push(l,a);
}
cout<<endl;
cout<<"************入栈成功***********"<<endl;
}
int main()
{
LinkStack L,J,K;
cout<<"*****************大整数加法***************"<<endl<<endl<<endl;
cout<<"*****************1.输入被加数***************"<<endl;
cout<<"*****************2.输入加数*****************"<<endl;
cout<<"*****************3.相加*********************"<<endl;
cout<<"*****************4.输出相加结果*************"<<endl;
cout<<"*****************输入除1-4外的数字退出******"<<endl;
int choose=-1;
while(choose!=0)
{ cout<<"请选择:";
cin>>choose;
switch(choose)
{
case 1:
InitStack(L);
creat(L);
break;
case 2:
InitStack(J);
creat(J);
break;
case 3:
InitStack(K);
cout<<"******************两数相加**********************"<<endl;
if(add(L,J,K))
cout<<"******************两数相加成功******************"<<endl;
break;
case 4:
cout<<"******************输出**************************"<<endl;
getall(K);
break;
default:choose=0;
}
}
return 1;
}
------解决思路----------------------
你先把输入改了,cin和getchar不要混用,C++流和C输入输出不要混用。否则可能会出现问题。
#include <iostream>
using namespace std;
typedef char SElemType;
typedef int Status;
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define MAXSIZE 1000
#define TRUE 3
#define FALSE -3
typedef struct StackNode { //链栈定义
SElemType data;
struct StackNode *next;
} StackNode, *LinkStack;
LinkStack S;
Status InitStack(LinkStack &S ) //链栈初始化
{
S=NULL;
return OK;
}
Status StackEmpty(LinkStack S) //判断是否为空
{
if (S==NULL) return TRUE;
else return FALSE;
}
Status Push(LinkStack &S , SElemType e) //进栈
{
StackNode *p;
p=new StackNode;
if(!p) exit(OVERFLOW);
p->data=e;
p->next=S;
S=p;
return OK;
}
Status Pop (LinkStack &S,SElemType &e) //出栈
{
StackNode *p;
if (S==NULL) return ERROR;
e=S->data;
p=S;
S=S->next;
delete p;
return OK;
}
SElemType GetTop(LinkStack S) //取栈顶元素
{
if (S==NULL) exit(ERROR);
else return S->data;
}
Status getall(LinkStack S) //输出所有元素
{
char a;
if (S==NULL) exit(ERROR);
while(S!=NULL)
{ a=GetTop(S);
cout<<a;
S=S->next;
}
cout<<endl;
return OK;
}
Status add(LinkStack i,LinkStack j,LinkStack &k) //相加
{
char a,b,c;
int d,e;
e=0;
d=0;
while(i!=NULL||j!=NULL)
{
if(i!=NULL)
{ a=GetTop(i);
i=i->next;
}
else a='0';
if(j!=NULL)
{ b=GetTop(j);
j=j->next;
}
else b='0';
if(d==0) e=(a-48)+(b-48);
else e=(a-48)+(b-48)+1;
if(e>=10)
{ d=1;
e=e-10;
c=e+48;
Push(k,c);
}
else
{ d=0;
c=e+48;
Push(k,c);
}
}
return OK;
}
void creat(LinkStack &l)
{ char a;
cout<<"请输入数据:";
while((a=getchar())!='\r')
{ Push(l,a);
}
cout<<endl;
cout<<"************入栈成功***********"<<endl;
}
int main()
{
LinkStack L,J,K;
cout<<"*****************大整数加法***************"<<endl<<endl<<endl;
cout<<"*****************1.输入被加数***************"<<endl;
cout<<"*****************2.输入加数*****************"<<endl;
cout<<"*****************3.相加*********************"<<endl;
cout<<"*****************4.输出相加结果*************"<<endl;
cout<<"*****************输入除1-4外的数字退出******"<<endl;
int choose=-1;
while(choose!=0)
{ cout<<"请选择:";
cin>>choose;
switch(choose)
{
case 1:
InitStack(L);
creat(L);
break;
case 2:
InitStack(J);
creat(J);
break;
case 3:
InitStack(K);
cout<<"******************两数相加**********************"<<endl;
if(add(L,J,K))
cout<<"******************两数相加成功******************"<<endl;
break;
case 4:
cout<<"******************输出**************************"<<endl;
getall(K);
break;
default:choose=0;
}
}
return 1;
}
------解决思路----------------------
你先把输入改了,cin和getchar不要混用,C++流和C输入输出不要混用。否则可能会出现问题。