可以在我这个函数上改吗?!不改变Add函数参数类型和个数?!
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条回答
为你推荐
- 链表的实现 不知道我哪里错了 一直跳不到函数里
- 其他
- 1个回答
- 程序中的while陷入了死循环,我觉得是链表指针的问题,但是我找不出来,求大佬帮助
- c++
- 1个回答
- C++循环链表问题,调试的时候一直显示*****是nullptr,求问怎么解决
- c++
- 3个回答
- 链表的结点删除,两种写法几乎一样,但是不知道其中一个为什么是错的
- c语言
- 1个回答
- 【c语言/链表】两个有序单链表合成为一个有序单链表,自己写的代码运行出错,求助
- c语言
- 1个回答
- 一个C++链表问题........
- c++
- 2个回答
- c++ 来做链表(输入,打印出来),那里错了啊??
- c++
- 1个回答
- 链表操作中即使函数传入的是链表指针,若根节点没有改变,链表也会改变?
- c++
- 1个回答
- 双向链表,尾插函数用了之后得到结果不正常?
- 关于c++中的双向循环链表
- c++
- 3个回答
- c++链表 引发了异常: 读取访问权限冲突。 temp 是 0xCDCDCDCD。
- c++
- 2个回答
- 循环双链表中比较两个循环双链表是否相等的成员函数
- 1个回答
- C++ 复制链表从一个节点到另一个节点
- c++
- 2个回答
- 请教一个C++链表(linked list)的创建和遍历的基础问题
- c++
- 2个回答
- C++ 链表类 基本操作
- c++
- 2个回答
- C++,java的链表实现中构造函数
- 2个回答
- C++链表(我写的程序自己也看不懂)
- c++
- 10个回答
- C++单循环链表约瑟夫问题
- c++
- 2个回答
- c++和c创建静动态链表是一样的吗?如果不一样,请举例
- c++
- 4个回答
- 数据结构 链表的创建 不知道怎么改
- 3个回答