HDU 1002 : A + B Problem II

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接收加數(shù)   
    char b[2005];  
    int ans[2005];  //存儲(chǔ)相加結(jié)果   
    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)       //做加法運(yùn)算 ,直到一個(gè)字符串被算完。   
        {  
            if(ans[p]+(a[i]-'0')+(b[j]-'0')>9)   //大于9,進(jìn)位。   
            {  
                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) //當(dāng)a有剩余時(shí)就單獨(dú)和a做運(yùn)算。   
        {  
            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)//加標(biāo)記位,防止過多的前綴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) 
{//大數(shù)加法
    int len1 = a.length();//數(shù)a的長(zhǎng)度
    int len2 = b.length();//數(shù)b的長(zhǎng)度
    int i = len1-1,j = len2-1,temp = 0,carryIn = 0;//初始進(jìn)位為
    count = 0; 
    //從最后一位開始做加法
    while(i>=0&&j>=0) 
    { 
        temp = a[i]-'0'+b[j]-'0'+carryIn;//計(jì)算當(dāng)前位
        sum[count++] = temp%10+'0'; 
        carryIn = temp/10;//計(jì)算進(jìn)位
        --i; 
        --j; 
    } 
    //第一個(gè)數(shù)還有剩余
    if(i>=0) 
    { 
        //利用進(jìn)位繼續(xù)做
        while(i>=0) 
        { 
            temp = a[i]-'0'+carryIn; 
            sum[count++] = temp%10+'0'; 
            carryIn = temp/10; 
            --i; 
        } 
    } 
    //第二個(gè)數(shù)還有剩余
    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));   
        }   
    }   
} 
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問題, 分享了一些自己做題目的經(jīng)驗(yàn)。 張土汪:刷leetcod...
    土汪閱讀 12,890評(píng)論 0 33
  • **2014真題Directions:Read the following text. Choose the be...
    又是夜半驚坐起閱讀 10,991評(píng)論 0 23
  • 難以入眠的夜晚。 我做的是對(duì)還是錯(cuò)?也許我也在麻醉催眠自己呢?!昂陀星槿俗隹鞓肥?,別問是劫是緣”這是多么安慰自...
    宣禪閱讀 289評(píng)論 0 0
  • 像火燒般燃燒的夢(mèng)夜 很長(zhǎng)又很短 ...
    小詩鴿閱讀 250評(píng)論 1 2
  • 小樓淡月 南風(fēng)涼吹 憑欄惆悵 嘆光陰 不解人情 花落易成傷 惜韶華 拋人易去 流年誰輕唱 憶往昔 年少無知 折花錯(cuò)...
    寫詩的滑板少年閱讀 212評(píng)論 0 2

友情鏈接更多精彩內(nèi)容