Go: package main

import (
	"bufio"
	"fmt"
	"math/big"
	"os"
	"strconv"
)

var sc = bufio.NewScanner(os.Stdin)

func main() {
	sc.Scan()
	dataset, _ := strconv.Atoi(sc.Text())
	var firstdata *big.Int

	for i := 0; i < dataset*2; i++ {
		n := new(big.Int)
		sc.Scan()
		data, _ := n.SetString(sc.Text(), 10)

		if i%2 == 0 {
			firstdata = data
			continue
		}

		result := new(big.Int)
		if result := result.Add(data, firstdata); len(result.String()) > 80 {
			fmt.Println("overflow")
			continue
		} else {
			fmt.Println(result)
		}
	}
}

C++: #include <stdio.h>
#include <stdlib.h>
#include <string>
#include <iostream>
#include <math.h>
#include <stack>

using namespace std;

int main(){
    
    char d[81];
    char e[81];

    stack<char> st1;
    stack<char> st2;
    stack<int> st3;
    int n=0;
    scanf("%d",&n);

    for(int i=0; i<n; i++){
        scanf("%s",d);
        scanf("%s",e);
        
        //if((int)(strlen(d))>80||(int)(strlen(e))>80){
            printf("overflow");
        //}else{
            for(int j=0; j<(int)(strlen(d)); j++){
                st1.push(d[j]);
            }
            for(int j=0; j<(int)(strlen(e)); j++){
                st2.push(e[j]);
            }
            int temp=0;
            char temp_char;
            while(st1.empty()==false||st2.empty()==false){
                if(st1.empty()==false&&st2.empty()==false){
                    temp_char=st1.top();
                    temp+=atoi(&temp_char);
                    temp_char=st2.top();
                    temp+=atoi(&temp_char);
                    st1.pop();
                    st2.pop();
                }else if(st1.empty()==false&&st2.empty()==true){
                    temp_char=st1.top();
                    temp+=atoi(&temp_char);
                    st1.pop();
                }else if(st1.empty()==true&&st2.empty()==false){
                    temp_char=st2.top();
                    temp+=atoi(&temp_char);
                    st2.pop();
                }
                st3.push(temp%10);
                temp=temp/10;
           // }
            
            if(temp!=0){
                st3.push(temp);
            }
            
            if(st3.size()>80){
                printf("overflow");
            }else{
                while(st3.empty()==false){
                    printf("%d",st3.top());
                    st3.pop();
                }
            }
            printf("\n");
        }
    }
    
}

C++: #define scanf_s scanf
#define sscanf_s sscanf
#include <stdio.h>
#include <string>
#include <iostream>
#include <math.h>
using namespace std;
#define MAX 81
#define _MAX 100
//#define CONSTNUM 10000000
int main(void)
{
	int n, s = 0, x, y, r = 0, a, b;
	int sum_n[50][3] = { 0 };
	char sum[50][_MAX], astr[_MAX], bstr[_MAX], num[11] = { "0123456789" };
	char ca, cb;
	scanf_s("%d", &n);
	for (int i = 0; i < n; ++i) {
		scanf_s("%s %s", &astr, &bstr);
		for (x = 0; astr[x] != '\0'; ++x);
		for (y = 0; bstr[y] != '\0'; ++y);
		if (x > 80 || y > 80) {
			printf("overflow\n");
			continue;
		}
		for (int j = 0; j < x || j < y; ++j) {
			if (j < x && j < y) {
				ca = astr[x - j - 1]; cb = bstr[y - j - 1];
				sscanf_s(&ca, "%d", &a);
				sscanf_s(&cb, "%d", &b);
				if (x > y) sum[i][x - j] = num[(a + b + r) % 10];
				else sum[i][y - j] = num[(a + b + r) % 10];
				if (a + b + r >= 10) r = (a + b + r) / 10;
				else r = 0;
			}
			else {
				if (x > y) {
					if (r != 0) {
						ca = astr[x - j - 1];
						sscanf_s(&ca, "%d", &a);
						sum[i][x - j] = num[(a + r) % 10];
						if (a + r >= 10) r = (a + r) / 10;
						else r = 0;
					}
					else {
						sum[i][x - j] = astr[x - j - 1];
					}
				}
				else {
					if (r != 0) {
						cb = bstr[y - j - 1];
						sscanf_s(&cb, "%d", &b);
						sum[i][y - j] = num[(b + r) % 10];
						if (b + r >= 10) r = (b + r) / 10;
						else r = 0;
					}
					else {
						sum[i][y - j] = bstr[y - j - 1];
					}
				}
			}
		}
		sum_n[i][0] = x; sum_n[i][1] = y; sum_n[i][2] = r;
		r = 0;
	}
	for (int i = 0; i < n; ++i) {
		x = sum_n[i][0]; y = sum_n[i][1]; r = sum_n[i][2];
		if (y <= 80 - r && x <= 80 - r) {
			if (r == 1) printf("%d", r);
			for (int j = 1; j <= x || j <= y; ++j) {
				printf("%c", sum[i][j]);
			}
		}
		else {
			printf("overflow");
		}
		printf("\n");
	}
}

C++: #include<iostream>
#include<string>
#include<cmath>
#define loop(i,a,b) for(int i=a;i<b;i++)
#define rep(i,a) loop(i,0,a)
using namespace std;

int stoi(string s){
  int size=s.size();
  int num=0;
  rep(i,size){
    num+=((int)s[i]-'0')*pow(10,size-i-1);
  }
  return num;
}

string itos(int num){//this function is used when you want to change variable type from int to string
  int size=0;
  int cnt=1;
  while(num/cnt!=0){//count the digit of num
    size++;
    cnt*=10;
  }
  string s="";
  rep(i,size){//change num from int to string
    s+=(char)((num/(int)pow(10,size-i-1))+'0');
    num-=(int)(num/pow(10,size-i-1))*pow(10,size-i-1);
  }
  return s;
}

int main(){
	int n;
	cin>>n;
	string s[2];
	rep(i,n){
		cin>>s[0]>>s[1];
		if(s[0].size()>=80 || s[1].size()>=80){
			cout<<"overflow"<<endl;
			continue;
		}
		int dis=abs(s[0].size()-s[1].size());
		if(s[0].size()>s[1].size()){
			rep(j,dis){
				s[1].insert(0,"0");
			}
		}else{
			rep(j,dis){
				s[0].insert(0,"0");
			}
		}
		int size=s[0].size();
		int alt=0;
		string ans="";
		int num1;
		int num2;
		for(int a=(size-1);a>=0;a--){
			num1=(int)s[0][a]-'0';
			num2=(int)s[1][a]-'0';
			int result=num1+num2+alt;
			if(result<10){
				if(!result)ans.insert(0,"0");
				else ans.insert(0,itos(result));
				alt=0;
			}else{
				if(!(result%10))ans.insert(0,"0");
				else ans.insert(0,itos(result%10));
				alt=1;
			}
		}
		if(alt)ans.insert(0,"1");
		if(ans.size()>=80)cout<<"overflow"<<endl;
		else cout<<ans<<endl;
	}
	return 0;
}