Go: package main

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

var scanner = bufio.NewScanner(os.Stdin)

func main() {
	for scanner.Scan() {
		m, _ := strconv.Atoi(scanner.Text())
		if m == 0 {
			break
		}
		args1 := make([]float64, m)
		x := 0.0
		for i := 0; i < m-1; i++ {
			scanner.Scan()
			tmp, _ := strconv.ParseFloat(scanner.Text(), 64)
			x += tmp
			args1[i] = tmp
		}
		args1[m-1] = 360-x
		first_object := 0.0
		for _, v := range args1 {
			first_object+= math.Sin(v*math.Pi/180)
		}
		scanner.Scan()
		n, _ := strconv.Atoi(scanner.Text())
		args2 := make([]float64, n)
		y := 0.0
		for i := 0; i < n-1; i++ {
			scanner.Scan()
			tmp, _ := strconv.ParseFloat(scanner.Text(), 64)
			y += tmp
			args2[i] = tmp
		}
		args2[n-1] = 360-y
		second_object := 0.0
		for _, v := range args2 {
			second_object+= math.Sin(v*math.Pi/180)
		}
		if first_object > second_object+ 0.0000001 {
			fmt.Println(1)
		} else if second_object > first_object +0.0000001 {
			fmt.Println(2)
		} else {
			fmt.Println(0)
		}
	}
}

C++: #define _USE_MATH_DEFINES
#include<cstdio>
#include<iostream>
#include<vector>
#include<algorithm>
#include<queue>
#include<stack>
#include<cmath>
#include<climits>
using namespace std;

const double EPS = 1e-6;

int main(){
	while(true){
		int N[2], V, V_;
		double S[2] = {};
		for(int i = 0; i < 2; i++){
			cin >> N[i];
			if(N[i] == 0) return 0;
			V_ = 360;
			for(int j = 0; j < N[i]-1; j++){
				cin >> V;
				V_ -= V;
				S[i] += sin(M_PI*V/180);
			}
			S[i] += sin(M_PI*V_/180);
		}
		if(S[0] - S[1] > EPS) puts("1");
		else if(S[1] - S[0] > EPS) puts("2");
		else puts("0");
	}
	return 0;
}

C++: #include <iostream>
#include <cmath>

using namespace std;

#define PI 3.14159265358979323846264338327950288

int main(){

	int m, n;
	int v, vsum;
	double area1=0, area2=0;

	while(1){

		cin >> m;
		if(m == 0) break;

		vsum = 0;
		for(int i = 0; i < m - 1; i++){
			cin >> v;
			vsum += v;
			area1 += sin(v * PI / 180.0);
		}
		area1 += sin((360 - vsum) * PI / 180.0);

		cin >> n;

		vsum = 0;
		for(int i = 0; i < n - 1; i++){
			cin >> v;
			vsum += v;
			area2 += sin(v * PI / 180.0);
		}
		area2 += sin((360 - vsum) * PI / 180.0);

		if(area1 == area2 + 1e-9) cout << "0" << endl;
		else if(area1 > area2) cout<< "1" << endl;
		else cout<< "2" << endl;

	}

	return 0;
}

C++: #include<cmath>
#include<cstring>
#include<string>
#include<cstdio>
#include<algorithm>
#include<map>
#include<queue>
#include<iostream>
using namespace std;
#define EPS (1e-5)
int N,M;
double calc(int an){
  double rad = (double)an * M_PI/180.0;
  return sqrt(1.0-cos(rad)/2.0);
}
bool equal(double a,double b){ return abs(a-b) < EPS; }
int main(){
  while(cin >> N && N ){
    double a1=0.0,a2=0.0;
    int an,suman=0;
    for(int i=0;i<N-1;i++){
      cin >> an;
      //cout << "an " <<calc(an) << endl;
      a1 += calc(an);
      suman+=an;
    }
    a1 += calc(360-suman);
    cin >> M;
    suman = 0;
    for(int i=0;i<M-1;i++){
      cin >> an;
      //    cout << "an " <<calc(an) << endl;
      a2 += calc(an);
      suman += an;
    }
    a2 += calc(360-suman);
    //    cout << a1 << " " <<a2<<endl;
    if( equal(a1,a2) ) cout << 0 << endl;
    else if( a1 > a2 ) cout << 1 << endl;
    else cout << 2 <<endl;
  }
}

C++: #include <vector>
#include <map>
#include <set>
#include <stack>
#include <queue>
#include <algorithm>
#include <utility>
#include <functional>
#include <sstream>
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <cctype>
#include <string>
#include <cstring>
#include <ctime>
#include <climits>
#include <fstream>
using namespace std;
inline int toInt(string s) { int v; istringstream sin(s); sin >> v; return v;}
template<class T> inline string toStr(T x) { ostringstream sout; sout << x; return sout.str();}
typedef vector<int> vi;
typedef vector<vi>  vvi;
typedef vector<string> vs;
typedef pair<int, int> pii;
typedef long long ll;
#define ALL(a) (a).begin(),(a).end()
#define RALL(a) (a).rbegin(),(a).rend()
#define FOR(i,a,b) for(int i=(a);i<=(b);++i)
#define REP(i,n) FOR(i,0,(n)-1)
const double EPS = 1e-12;
const double PI = acos(-1.0);
const int INF = INT_MAX/10;

#include <complex>
typedef complex<double> P;

double dot(P a, P b) {
	return (a.real()*b.real() + a.imag()*b.imag());
}

double cross(P a, P b) {
	return (a.real()*b.imag() - a.imag()*b.real());
}

double area(P a, P b, P c) {
	return abs(cross(c-a, b-a)*0.5);
}

double to_radian(double degree) {
	return degree*PI/180.0;
}

#define LT(x,y) ((x)-(y)<=-EPS)

int main() {
	int m, n;
	while(cin >> m, m) {
		P o(0.0, 0.0);
		vector<P> pm;
		double v, tmp = 0;
		REP(i, m-1) {
			cin >> v;
			tmp += v;
			pm.push_back(P(cos(to_radian(tmp)), sin(to_radian(tmp))));
		}
		pm.push_back(P(cos(to_radian(0.0)), sin(to_radian(0.0))));
		double Sm = 0.0;
		REP(i, m) {
			Sm += area(pm[i], pm[(i+1)%m], o);
		}

		cin >> n;
		vector<P> pn;
		tmp = 0;
		REP(i, n-1) {
			cin >> v;
			tmp += v;
			pn.push_back(P(cos(to_radian(tmp)), sin(to_radian(tmp))));
		}
		pn.push_back(P(cos(to_radian(0.0)), sin(to_radian(0.0))));
		double Sn = 0.0;
		REP(i, n) {
			Sn += area(pn[i], pn[(i+1)%n], o);
		}

		if(LT(Sm, Sn)) {
			cout << 2 << endl;
		} else if(LT(Sn, Sm)) {
			cout << 1 << endl;
		} else {
			cout << 0 << endl;
		}
	}
	return 0;
}

C++: #include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<cassert>
#include<iostream>
#include<sstream>
#include<string>
#include<vector>
#include<queue>
#include<set>
#include<map>
#include<utility>
#include<numeric>
#include<algorithm>
#include<bitset>
#include<complex>

using namespace std;

typedef long long Int;
typedef vector<int> vint;
typedef pair<int,int> pint;
#define mp make_pair

template<class T> void pv(T a, T b) { for (T i = a; i != b; ++i) cout << *i << " "; cout << endl; }
template<class T> void chmin(T &t, T f) { if (t > f) t = f; }
template<class T> void chmax(T &t, T f) { if (t < f) t = f; }
int in() { int x; scanf("%d", &x); return x; }

#define PI atan(1.0)*4

int main() {
	int a,b;
cout<<PI<<endl;
	while(a=in()){
		int i;
		double d;
		int r=360;
		double aa=0;
		for(i=0;i<a-1;i++){
			cin>>d;
			r-=d;
//cout<<sin(d/180*PI);
			aa+=sin(d/180*PI);
		}
		aa+=sin(r/180*PI);
		cin>>b;
		r=360;
		double bb=0;
		for(i=0;i<b-1;i++){
			cin>>d;
			r-=d;
			bb+=sin(d/180*PI);
		}
		bb+=sin(r/180*PI);
cout<<aa<<" "<<bb<<endl;
		if(fabs(aa-bb)<=1e-9){
			cout<<0<<endl;
		}else if(aa>bb){
			cout<<1<<endl;
		}else{
			cout<<2<<endl;
		}
	}
	return 0;
}

C++: #include<math.h>
n,t,r;
float S;
main(i){
	for(;scanf("%d",&n),n;i=-i){
		r=360;
		for(;--n;){
			scanf("%d",&t);
			r-=t;
			S+=sin(t*M_PI/180)*i;
		}
		S+=sin(r*M_PI/180)*i;
		if(i<0){
			puts(fabs(S)>1e-6?S>0?"1":"2":"0");
			S=0;
		}
	}
	exit(0);
}

C++: #include <cstdio>
#include <cstring>
#include <algorithm>
#include <string>
#include <cmath>
#include <stack>
#include <vector>
#include <map>
#include <set>
#include <queue>
#include <list>
#include <iostream>
#include <sstream>
#include <climits>
#include <cfloat>
#include <complex>

using namespace std;

const double Eps = 1e-4;
const double PI = 4*atan(1.0);

int main()
{
	int n;
	while (scanf("%d", &n), n)
	{
		double area[2];
		area[0] = area[1] = 0;
		for (int w = 0; w < 2; ++w)
		{
			int s = 0;
			for (int i = 1; i < n; ++i)
			{
				int v;
				scanf("%d", &v);
				s += v;
				area[w] += sin(v*PI/180);
			}
			area[w] += sin((360-s)*PI/180);
			if (!w)
				scanf("%d", &n);
		}
		if (abs(area[0] - area[1]) < Eps)
			puts("0");
		else if (area[0] > area[1])
			puts("1");
		else
			puts("2");
	}

	return 0;
}