用栈实现大数相加运算[C++ 语言]

想看有关栈操作的基本例子请看本人另一篇博文:《栈的基本实现(入栈,出栈,清空,判断是否为空)》

本小程序可进行大数相加运算,仅限正整数。

经过简单的修改,解决逻辑导致的运算错误。但不保证我的代码百分之百没有错误。如在使用中发现存在运算错误。还请留言相告。谢谢

以下为代码。

#include <iostream>
#include <string>
using namespace std;

typedef class Node {
    public:
    int data;
    class Node *pNext;
}NODE, *PNODE;

typedef class Stack {
    public:
    PNODE pTop;
    PNODE pBottom;
}STACK, *PSTACK;

void init(PSTACK pS)
{
    pS->pTop = new NODE;
    pS->pBottom = pS->pTop;
    pS->pTop->pNext = NULL;
}

void push(PSTACK pS, int val)
{
    PNODE pNew = new NODE;
    pNew->data = val;
    pNew->pNext = pS->pTop;
    pS->pTop = pNew;
}

void traverse(PSTACK pS)
{
    PNODE p = pS->pTop;
    while(p != pS->pBottom) {
        cout << p->data;
        p = p->pNext;
    }
}

int main()
{
    int i, j, k, tmp;    //定义i,j用来保存输入a,b串的长度
    string a, b;
    cout << "Please input the a:\na = ";
    cin >> a;
    cout << "b = ";
    cin >> b;

    i = a.size()-1;
    j = b.size()-1;
    if(j>i) {
        a.swap(b);
        tmp = i; i = j; j = tmp;
    }
    k = j;

    STACK s;
    int val = 0, cf = 0;
    init(&s);
    while(j+1){
        if(cf) {
            tmp = (a[i]-'0') + (b[j]-'0') + 1;
            cf = 0;
        }
        else
            tmp = (a[i]-'0') + (b[j]-'0');

        if(tmp < 10)
            push(&s, tmp);
        else {
            push(&s, tmp%10);
            cf = 1;
        }
        --j;
        --i;
    }
    if(i == j) {
        if(cf)
            push(&s, 1);
    }
    while(i+1){
        if(cf) {
            tmp = (a[i]-'0') + 1;
            cf = 0;
        }
        else
            tmp = a[i]-'0';

        if(tmp < 10)
            push(&s, tmp);
        else {
            push(&s, tmp%10);
            cf = 1;
        }
        --i;
    }
    cout << "\na + b = ";
    traverse(&s);
    cout << "\n" << endl;
    return 0;
}