fork download
import java.util.*;
import java.lang.*;
import java.io.*;

class Quaternion {
	private double a;
	private double b;
	private double c;
	private double d;
	
	public Quaternion() {
		a = 0;
		b = 0;
		c = 0;
		d = 0;
	}
	public Quaternion(double a) {
		this.a = a;
		b = 0;
		c = 0;
		d = 0;
	}
	public Quaternion(double a, double b, double c, double d) {
		this.a = a;
		this.b = b;
		this.c = c;
		this.d = d;
	}
	
	public Quaternion conjug() {
		return new Quaternion(a, -b, -c, -d);
	}
	public double abs() {
		return Math.sqrt(a * a  + b * b + c * c + d * d);
	}
	public Quaternion inverse() throws ArithmeticException {
		return Quaternion.divide(this.conjug(), this.abs() * this.abs());
	}
	public boolean isZero() {
		return (a == 0 && b == 0 && c == 0 && d == 0);
	}
	
	public static Quaternion sum(Quaternion a, Quaternion b) {
		return new Quaternion(a.a + b.a, a.b + b.b, a.c + b.c, a.d + b.d);
	}
	public static Quaternion sub(Quaternion a, Quaternion b) {
		return new Quaternion(a.a - b.a, a.b - b.b, a.c - b.c, a.d - b.d);
	}
	public static Quaternion mul(Quaternion a, double mult) {
		return new Quaternion(a.a * mult, a.b * mult, a.c * mult, a.d * mult);
	}
	public static Quaternion mul(Quaternion a, Quaternion b) {
		return new Quaternion(a.a * b.a - a.b * b.b - a.c * b.c - a.d * b.d,
							  a.a * b.b + a.b * b.a + a.c * b.d - a.d * b.c,
							  a.a * b.c - a.b * b.d + a.c * b.a + a.d * b.b,
							  a.a * b.d + a.b * b.c - a.c * b.b + a.d * b.a);
	}
	public static Quaternion divide(Quaternion a, double divider) throws ArithmeticException {
		if (divider == 0) throw new ArithmeticException("Zero divider");
		return new Quaternion(a.a / divider, a.b / divider, a.c / divider, a.d / divider);
	}
	public static Quaternion divide(Quaternion a, Quaternion b) throws ArithmeticException {
		if (b.isZero()) throw new ArithmeticException("Zero divider");
		return Quaternion.mul(a, b.inverse());
	}
	
	public String toString() {
		return new String(a +
						  ((b < 0)? " - " : " + ") + Math.abs(b) + "*i" +
						  ((c < 0)? " - " : " + ") + Math.abs(c) + "*j" +
						  ((d < 0)? " - " : " + ") + Math.abs(d) + "*k\n");
	}
}
class Main {
	public static void main (String[] args) {
		Quaternion qt1 = new Quaternion();
		Quaternion qt2 = new Quaternion(5);
		Quaternion qt3 = new Quaternion(1, 2, 3, 4);
		Quaternion qt4 = new Quaternion(0.1, 1.4, -2.5, -1.7);
		if (!qt1.isZero()) {
			System.out.print(Quaternion.sum(qt3, qt4));
		} else {
			System.out.print(Quaternion.mul(qt3, qt4));
		}
		do {
			qt2 = Quaternion.sub(qt2, qt3);
			System.out.print(qt2);
			System.out.print(qt2.conjug());
			System.out.print(qt2.inverse());
		} while (qt2.isZero());
		try {
			System.out.print(Quaternion.divide(qt3, qt4));
		} catch (ArithmeticException e) {
			System.out.print(e.getMessage());
		}
		System.out.print(Quaternion.mul(qt3, 17.2));
	}
}
Success #stdin #stdout 0.11s 320576KB
stdin
Standard input is empty
stdout
11.600000000000001 + 6.5*i + 6.8*j - 10.499999999999998*k
4.0 - 2.0*i - 3.0*j - 4.0*k
4.0 + 2.0*i + 3.0*j + 4.0*k
0.08888888888888888 + 0.04444444444444444*i + 0.06666666666666665*j + 0.08888888888888888*k
-1.026102610261026 - 0.5490549054905489*i - 0.5580558055805579*j + 1.017101710171017*k
17.2 + 34.4*i + 51.599999999999994*j + 68.8*k