public class EulerIdentity {

    public static void main(String[] args) {
        System.out.println("e ^ (i*Pi) + 1 = " + (new Complex(0, Math.PI).exp()).add(new Complex(1, 0)));
    }

    public static class Complex {

        private double x, y;

        public Complex(double re, double im) {
            x = re;
            y = im;
        }

        public Complex exp() {
            double exp = Math.exp(x);
            return new Complex(exp * Math.cos(y), exp * Math.sin(y));
        }

        public Complex add(Complex a) {
            return new Complex(x + a.x, y + a.y);
        }

        @Override
        public String toString() {
            return x + " + " + y + "i";
        }
    }
}