HDU 6625 2017ACM/ICPC亚洲区域赛沈阳站 Little Boxes(高精度整数加法)

Problem Description
Little boxes on the hillside.
Little boxes made of ticky-tacky.
Little boxes.
Little boxes.
Little boxes all the same.
There are a green boxes, and b pink boxes.
And c blue boxes and d yellow boxes.
And they are all made out of ticky-tacky.
And they all look just the same.

Input
The input has several test cases. The first line contains the integer t (1 ≤ t ≤ 10) which is the total number of test cases.
For each test case, a line contains four non-negative integers a, b, c and d where a, b, c, d ≤ 2^62, indicating the numbers of green boxes, pink boxes, blue boxes and yellow boxes.

Output
For each test case, output a line with the total number of boxes.

Sample Input
4
1 2 3 4
0 0 0 0
1 0 0 0
111 222 333 404

Sample Output
10
0
1
1070

题意:

给了四个long long数,求四个数之和。

题解:

long long范围内的数相加会溢出,所以用大整数加法,套模板就好了。

/*大数加法*/ 
# include<cstdio>
# include<cstring>
# include<cstdlib>
#include<iostream>
using namespace std;
void add(char* a,char* b,char* c)
{
    int i,j,k,max,min,temp;
    char *s,*pmax,*pmin;
    max=strlen(a);
    min=strlen(b);
    if (max<min)
    {
        temp=max;
        max=min;
        min=temp;
        pmax=b;
        pmin=a;
    }
    else
    {
        pmax=a;
        pmin=b;
    }
    s=(char*)malloc(sizeof(char)*(max+1));
    s[0]='0';
    for (i=min-1,j=max-1,k=max;i>=0;i--,j--,k--)
        s[k]=pmin[i]-'0'+pmax[j];
       for (;j>=0;j--,k--)
           s[k]=pmax[j];
    for (i=max;i>=0;i--)
        if (s[i]>'9')
        {
            s[i]-=10;
            s[i-1]++;
        }
    if (s[0]=='0')
    {
        for (i=0;i<=max;i++)
            c[i-1]=s[i];
           c[i-1]='';
    }
    else
    {
        for (i=0;i<=max;i++)
            c[i]=s[i];
           c[i]='';
    }
    free(s);
}
int main()
{
    int n;
    cin>>n;
    while(n--)
    {
        char a[100],b[100],c[100],d[100],ans[100];
        cin>>a>>b>>c>>d;
        add(a,b,ans);
        add(ans,c,ans);
        add(ans,d,ans);
        cout<<ans<<endl;
    }
    return 0;
}
原文地址:https://www.cnblogs.com/orion7/p/7783368.html