Go: package main

import (
        "fmt"
        "bufio"
        "os"
)

func main() {
        var n int
        var a, b string
        sc := bufio.NewScanner(os.Stdin)
        fmt.Scanf("%d", &n)
        for i := 0; i < n; i++ {
                sc.Scan()
                a = sc.Text()
                sc.Scan()
                b = sc.Text()

                if len(a) > len(b) {
                        s := add(a, b)
                        if s[len(a)] > 0 {
                                if len(a) >= 80 {
                                        fmt.Printf("overflow")
                                } else {
                                        for i := 0; i <= len(a);i++ {
                                                fmt.Printf("%d", s[len(a)-i])
                                        }
                                }
                                fmt.Printf("\n")
                        } else {
                                if len(a)-1 >= 80 {
                                        fmt.Printf("overflow")
                                } else {
                                        for i := 0; i < len(a);i++ {
                                                fmt.Printf("%d", s[len(a)-i-1])
                                        }
                                }
                                fmt.Printf("\n")
                        }
                } else {
                        s := add(b, a)
                        if s[len(b)] > 0 {
                                if len(b) >= 80 {
                                        fmt.Printf("overflow")
                                } else {
                                        for i := 0; i <= len(b);i++ {
                                                fmt.Printf("%d", s[len(b)-i])
                                        }
                                }
                                fmt.Printf("\n")
                        } else {
                                if len(b)-1 >= 80 {
                                        fmt.Printf("overflow")
                                } else {
                                        for i := 0; i < len(b);i++ {
                                                fmt.Printf("%d", s[len(b)-i-1])
                                        }
                                }
                                fmt.Printf("\n")
                        }
                }
        }
}

// expects ln > lm
func add(n string, m string) (s [100]int) {
        ln := len(n)
        lm := len(m)
        var sum [100]int

        for i := 0; i < ln; i++ {
                var s, t int
                s = int(n[ln-1-i]) - int('0')

                if lm - 1 - i >= 0 {
                        t = int(m[lm-1-i]) - int('0')
                } else {
                        t = 0
                }

                sum[i+1] = (s + t + sum[i]) / 10
                sum[i] = (s + t + sum[i]) % 10
        }

        return sum
}

C++: #include <iostream>
#include <cstdio>
#include <vector>
#include <list>
#include <algorithm>
#include <cmath>
#include <stack>
#include <set>
using namespace std;

#define REP(i,n) for(int (i)=0; (i)<(n); (i)++)
#define FOR(i,a,b) for(int (i)=(a); (i)<(b); (i)++)
#define PUSH(n,v) for(int i=0; i<(n); i++) {int j; cin >> j; v.push_back(j);}
#define ALL(v) v.begin(), v.end()

int getdigit2(long long a) {
    if (a == 0) return 1;
    int cnt = 0;
    while(a) {
        cnt++;
        a /= 10;
    }
    return cnt;
}


int main() {
    long long a, b;
    int n;
    cin >> n;
    REP(i,n) {
        cin >> a >> b;
        if (getdigit2(a) > 80 || getdigit2(b) > 80 || getdigit2(a + b) > 80) cout << "overflow" << endl;
        else {
            cout << a + b << endl;
        }
    }
    return 0;
}

C++: #include<stdio.h>
#include<string.h>
int main()
{
    char a[200],b[200];
    int c[200];
    int n,k;
    scanf("%d",&n);
    getchar();
    while(n--)
    {
        memset(a,0x00,sizeof(a));
        memset(b,0x00,sizeof(b));
        memset(c,0,sizeof(c));
        scanf("%s%s",a,b);
        int i,j,la,lb;
        la=strlen(a)-1;
        lb=strlen(b)-1;
        k=la>lb?la:lb;
        for(i=0; la>=0; i++,la--)
            c[i]+=a[la]-'0';
        for(i=0; lb>=0; i++,lb--)
        {
            c[i]+=b[lb]-'0';
            if(c[i]>=10)
            {
                c[i]-=10;
                c[i+1]+=1;
            }
        }
        while(c[i]!=0)
        {
            if(c[i]>=10)
            {
                c[i]-=10;
                c[i+1]+=1;
            }
            i++;
        }
        if(i>81)
            printf("overflow\n");
        else
        {
            for(j=i-1;j>=0;j--)
                printf("%d",c[j]);
            printf("\n");
        }
    }
    return 0;
}

C++: /*****include*****/
#include <iostream>
#include <fstream>

/*****デバッグ定義*****/
//#define DEBUG
/*****マクロ定義*****/

/*****名前空間*****/
using namespace std;

/*****グローバル変数置き場*****/

/*****その他関数置き場*****/

/*****main関数*****/
int main(){
	/*****ファイルオープン*****/
#ifdef DEBUG
	ofstream fout("output.txt");
	ifstream fin("input.txt");
	if(!fout || !fin){
		cout << "Can't open the file.\n";
		return;
	}
#endif
	/*****変数置き場*****/
	char number1[81];
	char number2[81];
	int sum[81];
	int digit1;
	int digit2;
	int digit_sum;
	int move_up;
	int i,j;
	int n;
	/*****処理部*****/
	cin >> n;
	for(int loop=0;loop<n;loop++){
		for(int a=0;a<81;a++){
			number1[a] = '0';
			number2[a] = '0';
		}
		digit1 = 0;
		digit2 = 0;
		cin >> number1;
		cin >> number2;
		while(number1[digit1] != '\0')	digit1++;
		while(number2[digit2] != '\0')	digit2++;
		move_up = 0;
		//cout << digit1 << " " << digit2 << endl;
		if(digit1 != digit2){
			if(digit1 > digit2){
				i = digit1;
				j = digit2;
				while(j>=0){
					number2[i] = number2[j];
					number2[j] = '0';
					i--;j--;
				}
			}else{
				i = digit1;
				j = digit2;
				while(i>=0){
					number1[j] = number1[i];
					number1[i] = '0';
					i--;j--;
				}
			}
		}
		/*for(int i=((digit1 > digit2)? digit1 : digit2);i>0;i--){
			cout << number1[i-1];
		}
		cout << endl;
		for(int i=((digit1 > digit2)? digit1 : digit2);i>0;i--){
			cout << number2[i-1];
		}
		cout << endl;*/
		//for(int i=0;i<4;i++)	cout << number2[i] << " " << atoi(&number2[i]) << endl;
		//for(int i=0;i<4;i++)	cout << number1[i] << " " << atoi(&number1[i]) << endl;
		digit_sum = 0;
			for(int i=((digit1 > digit2)? digit1 : digit2);i>0;i--){
		//cout << atoi(&number1[i-1]) << " " << atoi(&number2[i-1]) << endl;
			sum[digit_sum]
				= number1[i-1] - '0'
					+ number2[i-1] - '0'
			+ move_up;
			if(sum[digit_sum] >= 10){
				move_up = 1;
				sum[digit_sum] = sum[digit_sum] % 10;
			}else{
				move_up = 0;
			}
			digit_sum++;
		}
		if(move_up == 1){
			sum[digit_sum] = move_up;
			digit_sum++;
		}
		//cout << digit_sum << endl;
		if(digit_sum > 79)	cout << "overflow" << endl;
		else{
			for(int k=digit_sum-1;k>=0;k--){
				cout << sum[k];
			}
			cout << endl;
		}
	}
	/*****処理終了後*****/
#ifdef DEBUG
	fout.close();
	fin.close();
#endif
	return 0;
}

C++: #include <stdio.h>
#include <string.h>

int main(){
int n,ans[100],kuri,i,j,ap,bp;
char a[1000],b[1000];
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%s%s",a,b);
if(strlen(a)>80||strlen(b)>80){
printf("overflow\n");
continue;
}
ap=strlen(a)-1;
bp=strlen(b)-1;
j=0;
kuri=0;
while(ap>=0||bp>=0){
ans[j]=kuri;
if(ap>=0)ans[j]+=a[ap]- '0';
if(bp>=0)ans[j]+=b[bp]- '0';
kuri=ans[j]/10;
ans[j]%10;
j++;
ap--;
bp--;
}
if(kuri==1)ans[j]==1;
else j--;
if(j>=80){
printf("overflow\n");
continue;
}
for(;j>=0;j--){
printf("%d",ans[j]);
}
printf("\n");
}
return 0;
}