1. 程式人生 > >A + B Problem II高精度加法(hdu1002)

A + B Problem II高精度加法(hdu1002)

高精度加法AC模板:

(這個題輸出要控制好格式,兩個測試案例之間空一行,最後一個案例換行就行)

#include<iostream>
#include<sstream>
#include<cstdlib>
#include<cmath>
#include<cctype>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<map>
#include<vector>
#include<stack>
#include<queue>
#include<set>
#include<list>
#define mod 10000
#define Max 0x3f3f3f3f
#define Min 0xc0c0c0c0
#define mst(a) memset(a,0,sizeof(a))
#define f(i,a,b) for(int i=a;i<b;i++)
using namespace std;
typedef long long ll;
const int maxn = 2e3 + 5;
int main(){
    ios::sync_with_stdio(false);
    int T;
    //freopen("c1.txt", "r", stdin);
    //freopen("c2.txt", "w", stdout);
    cin>>T;
    int index = 1 ;
    while(T--){
        string s1,s2;
        int num[1005];
        cin>>s1>>s2;
        mst(num);
        int len1 = s1.length(), len2 = s2.length();
        int len = 0, temp = 0;
        for(; len1 > 0 || len2 > 0; len1--, len2--){
            if(len1 > 0 && len2 > 0){
                num[len] = ( (s1[len1 - 1] - '0')+ (s2[len2 - 1] - '0') + temp) % 10;   //本位和
                temp = ( (s1[len1 - 1] - '0') + (s2[len2 - 1] - '0') + temp) / 10;      //向高位的進位
            }
            else if(len1 <= 0){                 //類似與100000 + 100,到高位只能加一個數了 
                num[len] = (s2[len2 - 1] - '0' + temp) % 10;
                temp = ( (s2[len2 - 1] - '0') + temp) / 10;
            }
            else{
                num[len] = (s1[len1 - 1] - '0' + temp) % 10;
                temp = ( (s1[len1 - 1] - '0') + temp) / 10;
            }
            len++;
        }
        cout<<"Case "<<index++<<":"<<endl<<s1<<" + "<<s2<<" = ";
        if(temp > 0){       //最後還有向高位的進位,這裡很容易忽視然後WA
            printf("1");
        }
        for(int i = len - 1; i >= 0; i--){
            cout<<num[i];
        }
        if(T != 0){
            cout<<endl<<endl;
        }
        else{
            cout<<endl;
        }
    }
    //fclose(stdin);
    //fclose(stdout);
    return 0;
}