大整数减法

来源:互联网 发布:c语言文件后缀 编辑:程序博客网 时间:2024/04/29 17:39
#include <iostream>#include <cstring>using namespace std;const int MAXLEN = 200;//大整数减法int Substract(int MaxLen, int *a1, int *a2){    int nHighestPos = 0;    for(int i = 0; i < MaxLen; ++i)    {        a1[i] -= a2[i];        if(a1[i] < 0)//判断是否需要借位        {            a1[i] += 10;            a1[i + 1]--;        }        if(a1[i] > 0)        nHighestPos = i;    }    return nHighestPos;}//求最大值int Max(int x, int y){    return ((x > y) ? x : y);}int main(){    //标志应该谁是被减数,从而确定顺序    int n;//要输入的组数    cin >> n;    while(n--)    {        char *s1 = new char[MAXLEN + 10]();//每次循环开始动态分配,结束动态释放内存,可以防止加减交替运算时造成的内存错误        char *s2 = new char[MAXLEN + 10]();        int *a1 = new int[MAXLEN + 10]();        int *a2 = new int[MAXLEN + 10]();        int Flag = 0;        cin >> s1;        cin >> s2;        int nLen1 = strlen(s1);        for(int i = nLen1 - 1, j = 0; 0 <= i; --i)        {            a1[j++] = s1[i] - '0';        }        int nLen2 = strlen(s2);        for(int i = nLen2 - 1, j = 0; 0 <= i; --i)        {            a2[j++] = s2[i] - '0';        }        int MaxLen = Max(nLen1, nLen2);        //        if(nLen1 == nLen2)        {            for(int i = 0; i < nLen1; ++i)            {                if(s1[i] > s2[i])                {                    Flag = 1;                    break;                }else if(s2[i] > s1[i])                {                    Flag = 2;                    break;                }            }        }        //        if(Flag == 1 || nLen1 > nLen2)        {            int Pos = Substract(MaxLen, a1, a2);            for(int i = Pos; 0 <= i; --i)            cout << a1[i];            cout << endl;        }else if(Flag == 2 || nLen2 > nLen1)        {            int Pos = Substract(MaxLen, a2, a1);            for(int i = Pos; 0 <= i; --i)            {                if(i == Pos)                cout << -a2[i];                else                cout << a2[i];            }            cout << endl;        }else        cout << 0 << endl;        delete [] s1;        delete [] s2;        delete [] a1;        delete [] a2;    }    return 0;}

原创粉丝点击