不一般的加减法(字符数组)

  • a+b

描述

求a+b的值

输入

第一行一个整数T,表示接下来有T行

每行两个整数是a,b,(0<=a,b<=10^10000)

输出

输出值

输入样例 1 

2
100 100
10000000000 10000000000

输出样例 1

200
20000000000
  • a-b

描述

求a-b的值

输入

第一行一个整数T,表示接下来有T行

每行两个整数是a,b,(0<=a,b<=10^10000)

输出

输出值

输入样例 1 

2
100 98
100000000000000000000 1

输出样例 1

2
99999999999999999999

代码

#include 
using namespace std;

const int M=10005;

struct bigmb
{
    int len;
    int arr[M];
    bigmb()
    {
        memset(arr,0,sizeof(arr));
        len=0;
    }
};

bigmb change(char *ta,int n)  \\将输入的char数组转成 bigmb类型
{
    bigmb t;
    for(int i=n-1; i>=0; i--)
    {
        t.arr[t.len++]=ta[i]-'0';  \\从后开始存
    }
    return t;
}

bigmb add(bigmb a,bigmb b) \\加法
{
    bigmb c;
    int in=0;   \\保存进位的数           
    for(int i=0; i=1 && c.arr[c.len-1]==0) c.len--; \\删除多余的0
    return c;
}
int main()
{
    int r;
    cin>>r;
    while(r--)
    {
        char a[M],b[M];
        cin>>a>>b;
        int sizea=strlen(a);
        int sizeb=strlen(b);
        bigmb ta=change(a,sizea);
        bigmb tb=change(b,sizeb);
        //bigmb c=add(ta,tb);
        if(sizeb>sizea)  \\如果b大于a,先输出负号,再计算b-a
        {
            bigmb c=sub(tb,ta);
            cout<<'-';
            for(int i=c.len-1; i>=0; i--) cout<=0; i--)
            {
                if(tb.arr[i]>ta.arr[i])
                {
                    flag=1;
                    break;
                }
            }
            if(flag)
            {
                bigmb c=sub(tb,ta);
                cout<<'-';
                for(int i=c.len-1; i>=0; i--) cout<=0; i--) cout<=0; i--) cout<

 

你可能感兴趣的:(例题,字符串,c++)