大整数加减法c/c++实现

大整数加法

# include <iostream>
using namespace std;
template<typename T>
int count(T& x)
{
    int s1 = sizeof(x);
    int s2 = sizeof(x[0]);
    int result = s1 / s2;
    return result;
}
void add(int a[],int b[],int alength,int blength) {
    int *p;
    int m = 0;
    int n = 0;
    int flag = 0;
    //在初始分配结果p数组长度多与最长长度保存进位
    if (alength >= blength) {
        p = new int[alength + 1]{ 0 };
        m = blength;
        n = alength + 1;
    }
    else {
        p = new int[blength + 1]{ 0 };
        m = alength;
        n = blength + 1;
    }
    //同有位置的加法
    for (int i = 0; i < m; i++) {
        p[i] = (a[i] + b[i] + flag)%10;
        flag = (a[i] + b[i] + flag) / 10;
    }
    //多余位置的加法
    if (alength >=blength) {
        for (int i = m; i < alength ; i++) {
            p[i] = (a[i] + flag) % 10;
            flag = (a[i] + flag) / 10;
        }
        if (flag != 0) {
            p[alength] = flag;
            cout << "结果长度:" << (alength + 1) << endl;
            for (int i = 0; i < alength + 1; i++)
                cout << p[i] << " ";
        }
        else {
            cout << "结果长度:" << alength << endl;
            for (int i = 0; i < alength ; i++)
                cout << p[i] << " ";
        }

    }
    if (blength > alength) {
        for (int i = m; i < blength; i++) {
            p[i] = (b[i] + flag) % 10;
            flag = (b[i] + flag) / 10;
        }
        if (flag != 0) {
            p[blength] = flag;
            cout << "结果长度:" << (blength + 1) << endl;
            for (int i = 0; i < blength + 1; i++)
                cout << p[i] << " ";
        }
        else {
            cout << "结果长度:" << blength << endl;
            for (int i = 0; i < blength; i++)
                cout << p[i] << " ";
        }

大整数减法

# include <iostream>
using namespace std;
template<typename T>
int count(T& x)
{
    int s1 = sizeof(x);
    int s2 = sizeof(x[0]);
    int result = s1 / s2;
    return result;
}
void reduce(int a[], int b[], int alength, int blength) {
    
    int m = 0;
    int n = 0;
    int length = 0;
    int *p = new int[alength]{ 0 };
    length = alength;
    m = blength;
    for (int i = 0; i <blength; i++) {
        if (a[i] >= b[i])
            p[i] = a[i] - b[i];
            
        else {
            n = i;
            //实现连环借位方法
            while (1) {
                if (a[i + 1] != 0) {
                    a[i + 1] = a[i + 1] - 1;
                    break;
                }
                else {
                    a[i + 1] = 9;
                    i = i + 1;
                }

            }
            i = n;
            p[i] = 10 - b[i] + a[i];
        }
        
    }
    //解决a数组多出来部分赋值问题,并第一次次排除头为0的问题
    for (int i = alength-1; i >=blength; i--) {
            if (a[i] != 0) {
                p[i] = a[i];
                break;
            }
            else
                length--;
        
        }
        for (int i = blength; i < length-1; i++) {
            p[i] = a[i];
        }
        //第二次彻底解决头为0的问题出现低二次原因是第一次在解决头出现问题仅仅解决的是a数组赋值有0情况。
        for (int i = length-1; i >= 0; i--) {
            if (p[i] == 0)
                length--;
            else
                break;
        }
            
            cout << "结果长度:" << length << endl;
            for (int i = 0; i < length ; i++)
                cout << p[i] << " ";
            delete[]p;
            delete p;

    }
    
    


void main() {
    int alength = 0;
    int blength = 0;
    int *a;
    int *b;
    cout << "输入长度alength:";
    cin >> alength;
    a = new int[alength] {0};
    for (int i = 0; i < alength; i++) {
        cin >> a[i];
    }
    cout << "输入长度blength:";
    cin >> blength;
    b = new int[blength] {0};
    for (int i = 0; i < blength; i++) {
        cin >> b[i];
    }
    reduce(a, b, alength, blength);
    delete[]a;
    delete[]b;
    delete a;
    delete b;
}

        
    }
    delete []p;
    delete p;
}

void main() {
    int alength = 0;
    int blength = 0;
    int *a;
    int *b;
    cout << "输入长度alength:";
    cin >> alength;
    a = new int[alength] {0};
    for (int i = 0; i < alength; i++) {
        cin >> a[i];
    }
    cout << "输入长度blength:";
    cin >> blength;
    b = new int[blength] {0};
    for (int i = 0; i < blength; i++) {
        cin >> b[i];
    }
    add(a, b, alength, blength);
    delete[]a;
    delete[]b;
    delete a;
    delete b;
}

猜你喜欢

转载自blog.csdn.net/qq_41578371/article/details/82889501