美文网首页HDU OJ
HDU 1002 : A + B Problem II

HDU 1002 : A + B Problem II

作者: 沙蚕 | 来源:发表于2017-06-20 23:20 被阅读0次
    Problem Description

    I have a very simple problem for you. Given two integers A and B, your job is to calculate the Sum of A + B.

    Input

    The first line of the input contains an integer T(1<=T<=20) which means the number of test cases. Then T lines follow, each line consists of two positive integers, A and B. Notice that the integers are very large, that means you should not process them by using 32-bit integer. You may assume the length of each integer will not exceed 1000.

    Output

    For each test case, you should output two lines. The first line is "Case #:", # means the number of the test case. The second line is the an equation "A + B = Sum", Sum means the result of A + B. Note there are some spaces int the equation. Output a blank line between two test cases.

    C:

    #include<stdio.h>  
    #include<string.h>  
    int main()  
    {  
        char a[2005];   //a,b接收加数   
        char b[2005];  
        int ans[2005];  //存储相加结果   
        int t,flag;  
        int index=1;  
        int len1,len2;  
        scanf("%d",&t);  
        while(t--)  
        {  
            memset(ans,0,sizeof(ans));  //每次赋零   
            scanf("%s%s",a,b);  
            len1=strlen(a);  
            len2=strlen(b);  
            int i=len1-1;   //i,j分别指向a,b待处理的位置。   
            int j=len2-1;  
            int p=0;    //指向ans中待处理的位置   
              
            while(i>=0 && j>=0)       //做加法运算 ,直到一个字符串被算完。   
            {  
                if(ans[p]+(a[i]-'0')+(b[j]-'0')>9)   //大于9,进位。   
                {  
                    ans[p]=(ans[p]+(a[i]-'0')+(b[j]-'0'))%10;  
                    ans[p+1]++;  
                }  
                else  
                {  
                    ans[p]=ans[p]+(a[i]-'0')+(b[j]-'0');  
                }  
                i--;j--;p++;  
            }  
          
            if(i>=0) //当a有剩余时就单独和a做运算。   
            {  
                while(i>=0)  
                {  
                    if(ans[p]+(a[i]-'0')>9)  
                    {  
                        ans[p]=(ans[p]+(a[i]-'0'))%10;  
                        ans[p+1]++;  
                    }  
                    else  
                    {  
                        ans[p]=ans[p]+(a[i]-'0');  
                    }  
                    i--;p++;  
                }  
            }  
            else if(j>=0)  
            {  
                while(j>=0)  
                {  
                    if(ans[p]+(b[j]-'0')>9)  
                    {  
                        ans[p]=(ans[p]+(b[j]-'0'))%10;  
                        ans[p+1]++;  
                    }  
                    else  
                    {  
                        ans[p]=ans[p]+(b[j]-'0');  
                    }  
                    j--;p++;  
                }  
            }   
            flag=0;  
            printf("Case %d:\n",index); index++;  
            printf("%s + %s = ",a,b);  
            for(int i=p;i>=0;i--)  
            {  
                if(ans[i]==0 && flag==0)//加标记位,防止过多的前缀0   
                    continue;  
                else  
                {  
                    flag=1;  
                    printf("%d",ans[i]);  
                }  
            }  
            printf("\n");  
            if(t)  
                printf("\n");  
        }  
        return 0;  
    }  
    

    C++:

    #include <iostream> 
    #include <string> 
    using namespace std; 
    
    void Add(string a,string b,char sum[],int& count) 
    {//大数加法
        int len1 = a.length();//数a的长度
        int len2 = b.length();//数b的长度
        int i = len1-1,j = len2-1,temp = 0,carryIn = 0;//初始进位为
        count = 0; 
        //从最后一位开始做加法
        while(i>=0&&j>=0) 
        { 
            temp = a[i]-'0'+b[j]-'0'+carryIn;//计算当前位
            sum[count++] = temp%10+'0'; 
            carryIn = temp/10;//计算进位
            --i; 
            --j; 
        } 
        //第一个数还有剩余
        if(i>=0) 
        { 
            //利用进位继续做
            while(i>=0) 
            { 
                temp = a[i]-'0'+carryIn; 
                sum[count++] = temp%10+'0'; 
                carryIn = temp/10; 
                --i; 
            } 
        } 
        //第二个数还有剩余
        if(j>=0) 
        { 
            while(j>=0) 
            { 
                temp = b[j]-'0'+carryIn; 
                sum[count++] = temp%10+'0'; 
                carryIn = temp/10; 
                --j; 
            } 
        } 
        //最高位特殊考虑下
        if(carryIn>0) 
        { 
            sum[count++] = '1'; 
        } 
    } 
    
    void reversePrint(char arr[],int len) 
    {//逆向输出
        for(int i=len-1;i>=0;--i) 
        {
            cout<<arr[i]; 
        }
        cout<<endl; 
    } 
    
    int main() 
    { 
        string a,b; 
        char sum[2000];//和
        memset(sum,'0',2000); 
        int nCount = 0; 
        int caseNum,curCase=0; 
        cin>>caseNum; 
        do 
        { 
            curCase++; 
            cin>>a>>b; 
            Add(a,b,sum,nCount); 
            cout<<"Case "<<curCase<<":"<<endl; 
            cout<<a<<" + "<<b<<" = "; 
            reversePrint(sum,nCount); 
            if(curCase<caseNum) 
            {
                cout<<endl; 
            }
        }while(curCase<caseNum); 
        return 0; 
    } 
    

    Java:

    import java.math.BigInteger;   
    import java.util.Scanner;   
      
    class Main {   
        public static void main(String[] args) {   
            Scanner cin = new Scanner(System.in);   
            int n;   
            BigInteger a, b;   
      
            n = cin.nextInt();   
            for (int i = 0; i < n; i++) {   
                if (i > 0) {   
                    System.out.println();   
                }   
                a = cin.nextBigInteger();   
                b = cin.nextBigInteger();   
                System.out.println("Case " + (i + 1) + ":");   
                System.out.println("" + a + " + " + b + " = " + a.add(b));   
            }   
        }   
    } 
    

    相关文章

      网友评论

        本文标题:HDU 1002 : A + B Problem II

        本文链接:https://www.haomeiwen.com/subject/nvaaqxtx.html