概述
要求是:大整数相加,必须是非负整数
#include<iostream>
#include<stack>
#define elemType int
using namespace std;
typedef struct Node {
elemType val;
struct Node* next;
Node(elemType x) :val(x), next(NULL) {}
}*List;
// 插入元素
void insertElem(List& L, elemType e) {
List p = new Node(0);
p->val = e;
p->next = L->next;
L->next = p;
//delete p;
这里不能删除p
}
// 初始化
void initList(List& L) {
List p = new Node(0);
L = new Node(0);
//L->next = NULL;
// 在初始化p是就已经为NULL;
string s;
cin >> s;
if (!s.size())
exit(0);
for (size_t k = 0; k < s.size(); k++) {
if (!(s[k] >= '0' && s[k] <= '9'))
exit(0);
}
int i = 0;
while (s[i++]) {
p->val = s[i - 1] - '0';
p->next = L->next;
L->next = p;
p = new Node(0);
if (!p)
return;
}
}
// 倒置链表
void reversalList(List& L) {
List p = new Node(0);
List q = new Node(0);
p = L->next;
L->next = NULL;
while (p != NULL) {
q = p->next;
p->next = L->next;
L->next = p;
p = q;
}
}
List sumAB(List a, List b) {
if (!a->next && !b->next)
return NULL;
if (!a->next) {
reversalList(b);
return b->next;
}
if (!b->next) {
reversalList(a);
return a->next;
}
elemType carry = 0;
// 进位标记
List pHead = new Node(0);
a = a->next;
b = b->next;
elemType temp;
while (a && b) {
temp = a->val + b->val + carry;
if (temp > 9) {
temp -= 10;
carry = 1;
}
else
carry = 0;
insertElem(pHead, temp);
a = a->next;
b = b->next;
}
// 剩下的
while (a) {
temp = a->val + carry;
if (temp > 9) {
temp -= 10;
carry = 1;
}
else
carry = 0;
insertElem(pHead, temp);
a = a->next;
}
while (b) {
temp = b->val + carry;
if (temp > 9) {
temp -= 10;
carry = 1;
}
else
carry = 0;
insertElem(pHead, temp);
b = b->next;
}
// 确定最高位是否还有
if (carry) {
insertElem(pHead, carry);
}
return pHead->next;
}
// 打印
void printList(List L) {
List p = new Node(0);
p = L;
while (p) {
cout << p->val;
p = p->next;
}
}
int main() {
List a, b;
initList(a);
initList(b);
printList(sumAB(a, b));
return 0;
}
最后
以上就是开放猎豹为你收集整理的大整数相加(用链表)的全部内容,希望文章能够帮你解决大整数相加(用链表)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复