CWQFOREVER 2016-11-06 05:44 采纳率: 33.3%
浏览 1310

c++链表大整数求和,我的结果是无限循环,知道是Add函数错了,但是不知道怎么改

能不能不改变我的Add函数的参数个数和类型把它改正确,求助各位大神了
#ifndef HEAD_H_INCLUDED
#define HEAD_H_INCLUDED

class Node
{
public:
int data;//存储数据
Node *next;
};
class LinkList
{
private:

int length;//链表长度

public:
Node first;
LinkList();
LinkList(int a[],int n);//有参构造函数
~LinkList();
void Reserve(Node
first);//逆置链表
void PrintList();//打印链表
void PrintList(Node* first);//打印链表
friend LinkList Add(LinkList A,LinkList B);//链表A,B相加,并返回一个链表
};

#endif // HEAD_H_INCLUDED

#include "Head.h"
#include

using namespace std;
LinkList::LinkList()//无参构造函数的实现
{
first=new Node;
first->next=NULL;
}
LinkList::LinkList(int a[],int n)//有参构造函数的实现
{
first=new Node;
first->next=NULL;
for(int i=0; i {
Node *s=new Node;
s->data=a[i];
s->next=first->next;
first->next=s;
}
length=n;
}
LinkList::~LinkList()//析构函数的实现
{
while(first!=NULL)
{
Node* q=first;
first=first->next;
delete q;
}
}
void LinkList::Reserve(Node* first)//逆置函数的实现
{
Node* p=first->next;
first->next=NULL;
while(p!=NULL)
{
Node* u=p->next;
p->next=first->next;
first->next=p;
p=u;
}
}
void LinkList::PrintList(Node* first)//打印函数的实现
{
Node* p=first->next;
while(p!=NULL)
{
cout<data;
p=p->next;
}
}
void LinkList::PrintList()//打印函数的实现
{
Node* p=first->next;
while(p!=NULL)
{
cout<data;
p=p->next;
}
}
LinkList Add(LinkList A,LinkList B)//A、B链表相加
{
int flag=0;
int i=0;
int n=A.length;
int m=B.length;
Node* a=A.first->next;
Node* b=B.first->next;
LinkList C;
while(i {
Node* s=new Node;//创建一个节点来依次储存链表A、B各位相加的数值
s->data=(a->data+b->data+flag)%10;
flag=(a->data+b->data+flag)/10;
s->next=C.first->next;//利用头插法来创建C链表
C.first->next=s;
a=a->next;
b=b->next;
i++;
}
for(;i {
Node* s=new Node;
s->data=(a->data+flag)%10;
flag=(a->data+flag)/10;
s->next=C.first->next;
C.first->next=s;
a=a->next;
}
for(;i {
Node* s=new Node;
s->data=(b->data+flag)%10;
flag=(b->data+flag)/10;
s->next=C.first->next;
C.first->next=s;
b=b->next;
}
if(flag)//最后若flag为1时进位
{
Node* s=new Node;
s->data=1;
s->next=C.first->next;
C.first->next=s;
}
C.first->next=NULL;
return C;
}

#include "Head.h"
#define MaxSize 100
#include

using namespace std;

int main()
{
string i,j;
int a[MaxSize],b[MaxSize];
c:cout<<"请输入第一个大整数(<=100位):"< cin>>i;
int lena=i.size();
if(lena>MaxSize)//判断输入第一位大整数的位数是否大于100位,若大于100位,则回到c处重新输入第一位大整数
{
cout<<"输入数值过大,请输入100位以内数值!"< goto c;
}
d:cout cin>>j;
int lenb=j.size();
if(lenb>MaxSize)//判断输入第二位大整数的位数是否大于100位,若大于100位,则回到d处重新输入第二位大整数
{
cout<<"输入数值过大,请输入100位以内数值!"<<endl;
goto d;
}cout<<endl;
for(int m=0;m<lena;m++)//将字符串转换为整数
a[m]=i[m]-48;
for(int n=0;n<lenb;n++)
b[n]=j[n]-48;
LinkList A(a,lena);//构造A链表
LinkList B(b,lenb);//构造B链表
LinkList C;
C=Add(A,B);
A.Reserve(A.first);//A链表逆置
A.PrintList(A.first);//打印链表A
cout<<endl;
B.Reserve(B.first);//B链表逆置
B.PrintList(B.first);//打印链表B
cout<<endl;
C.Reserve(C.first);
C.PrintList();
return 0;
}

  • 写回答

2条回答 默认 最新

  • threenewbee 2016-11-06 16:57
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 chaquopy python 安卓
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 有没有帮写代码做实验仿真的
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥30 vmware exsi重置后登不上
  • ¥15 易盾点选的cb参数怎么解啊
  • ¥15 MATLAB运行显示错误,如何解决?
  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容
  • ¥15 关于#stm32#的问题:CANOpen的PDO同步传输问题