一个大数加法题,处理大数用倒置加,但是不用像网上那样倒置来倒置去的,直接长度递减就好,还有就是输出0,坑了好几次,自己写的print倒置输出竟然忘记了还有0这个输出特例。


题目:http://acm.hdu.edu.cn/showproblem.php?pid=1047


代码:

Memory: 1584 KB
Time: 0 MS
Language: G++
Result: Accepted

代码:


#include <iostream>
#include <cstdio>
#include <cstring>
#define MAX 110
using namespace std;
void print(char s[])
{
    int flag=0;
    for(int i=MAX-1; i>-1; i--){
        if(s[i]!='0' || (s[i]=='0' && !i &&!flag))flag=1;   //当sum为0的时候输出0
        if(flag)printf("%c",s[i]);
    }
    cout<<endl;
}
void bigadd(char t[], char sum[])
{
    int t_len=strlen(t);
    for(int i=t_len-1,j=0; i>-1; i--,j++)
    {
        int a=(int)t[i]-'0';
        int b=(int)sum[j]-'0';
        sum[j]='0'+(a+b)%10;
        if((a+b)/10)sum[j+1]+=1;
    }
}
int main()
{
    int n;
    cin>>n;
    while(n--)
    {
        char sum[MAX], in[MAX];
        for(int i=0;i<MAX;i++)sum[i]='0';
        while(scanf("%s", in))
        {
            if(in[0]=='0')break;
            bigadd(in, sum);
        }
        print(sum);
        if(n)cout<<endl;
    }
    return 0;
}