• SDUT 2613 This is an A+B Problem


     

    This is an A+B Problem

    Time Limit: 1000 ms Memory Limit: 65536 KiB

    Problem Description

    As usual, there will be an A+B problem in warming up, this problem is:
    Given two integers A and B, your job is to calculate the sum of A + B.

    Input

     There are several test cases, For each test case:
    There are two integers A, B for each case (0  A , B < 101000).

    Output

     For each test case, output one line containing the result of A+B. 

    Sample Input

    1 2
    11111111111 11111111111

    Sample Output

    3
    22222222222

    提示:这个题看似非常简单,其实他说是A+B Problem,但是其实看样例就满满的恶意,10的1000次方,用long long也过不了,
    所以这不是一个简单的A+B Problem,所以这道题要用到大数模拟,即用字符串数组模拟来完成两数相加的操作。
    代码实现如下(g++):
    #include <bits/stdc++.h>
    
    using namespace std;
    
    char s1[1010];
    char s2[1010];
    int ab[1010];//因为是1000次方,所以只需开1010的数组即可
    
    int main()
    {
        int i,j;
        int len1,len2,a,b;
        memset(s1,'\0',sizeof(s1));
        memset(s2,'\0',sizeof(s2));
        memset(ab,0,sizeof(ab));//重置数组
        while(~scanf("%s %s",s1,s2))
        {
            len1=strlen(s1);
            len2=strlen(s2);
            if(len1==1&&s1[0]=='0'&&len2==1&&s2[0]=='0')//当出现0+0=0时
            {
                printf("0\n");
                continue;
            }                                        
            int y=0;
            for(i=len1-1,j=len2-1; i>=0||j>=0; i--,j--)
            {
                if(i>=0)
                {
                    a=s1[i]-'0';
                }
                else
                {
                    a=0;
                }
                if(j>=0)
                {
                    b=s2[j]-'0';
                }
                else
                {
                    b=0;
                }
                ab[y++]=a+b;
            }
            for(i=0; i<y; i++)
            {
                ab[i+1]+=(ab[i]/10);
                ab[i]%=10;//数组储存每一位
            }
            i=y;
            while(ab[i]==0)
            {
                i--;
            }
            for(; i>=0; i--)
            {
                printf("%d",ab[i]);
            }
            printf("\n");
            memset(s1,'\0',sizeof(s1));
            memset(s2,'\0',sizeof(s2));
            memset(ab,0,sizeof(ab));//必须重置数组
        }
        return 0;
    }
    
    
    /***************************************************
    Result: Accepted
    Take time: 0ms
    Take Memory: 156KB
    ****************************************************/
  • 相关阅读:
    CodeForces
    [SDOI2018] 战略游戏
    bzoj3786: 星系探索
    bzoj4383: [POI2015]Pustynia
    bzoj4353: Play with tree
    bzoj4336: BJOI2015 骑士的旅行
    bzoj4381: [POI2015]Odwiedziny
    codechef January Lunchtime 2017简要题解
    bzoj 3867: Nice boat
    3069: [Pa2011]Hard Choice 艰难的选择
  • 原文地址:https://www.cnblogs.com/syycjh/p/9608343.html
Copyright © 2020-2023  润新知