#include <iostream>
#include <math.h>

using namespace std;
// Declaration

class superlong
{
	private:
		int zahl[50];
	public:
		superlong(int initial);
		void operator += (superlong z);
		friend ostream& operator<< (ostream &os, superlong z);
	
};

// Implementation

ostream& operator<< (ostream &os, superlong z)
{
	bool anfang = false;
	for(int i=49; i>=0;i--)
	{
		if(anfang || z.zahl[i] != 0)
		{
			os << z.zahl[i];
			anfang = true;
		}
	}
	return(os);
}

void superlong::operator += (superlong z)
{
	int rest =0, temp=0;
	for(int i=0;i<50;i++)
	{
		temp = zahl[i] + z.zahl[i] + rest;
		zahl[i] = temp % 10;
		rest = temp / 10;
	}
	if(rest != 0)
	{
		cerr << "Uerberlauf!" << endl;
		exit(1);
	}
}

superlong::superlong(int initial)
{
	// Erst mal alles null setzen
	for(int i=0;i<50;i++) zahl[i] = 0;

	// Falls ein Initialwert angegeben wurde diesen einlesen
	int rest=initial, temp=0, i=0;
	while(rest > 0)
	{
		temp = rest - ((rest/10)*10);
		zahl[i] = temp;
		rest -= temp;
		rest /= 10;
		//cout << "Zahl(" << i << ")="<< zahl[i] << " Rest=" << rest << endl;
		i++;
	}
}


int main()
{
	superlong sum(0) ;
	superlong k(1) ;
	for (int i=1; i<=64; i++)
	{
		cout << "Auf Feld " << i << " sind " << k << " Koerner" << endl ;
		sum += k ;
		k += k ;
	}
	cout << "Summe aller Felder: " << sum << " Koerner" << endl ;
}
