public LongNumber(long number) { this.B = number % this.X; if (number >= X) { this.A = new LongNumber(number / this.X); } }
//public static LongNumber operator +(LongNumber firstNumber, LongNumber seconNumber) //{ // return new Complex(c1.real + c2.real, c1.imaginary + c2.imaginary); //} public static LongNumber operator +(LongNumber firstNumber, long seconNumber) { if (firstNumber == null) { return null; } else { LongNumber newNumber = new LongNumber(firstNumber); newNumber.AddNumber(seconNumber); return newNumber; } }
private static LongNumber FromLongNumber(LongNumber number) { if (number == null) { return null; } else { return new LongNumber(number); } }
private LongNumber(LongNumber number) { this.B = number.B; this.A = LongNumber.FromLongNumber(number.A); }
private void Multiply(LongNumber number) { }
private void Multiply(long number) { if (this.A != null) { this.A.Multiply(number); } if (number / X != 0) { LongNumber longNumber = new LongNumber(number); longNumber.Multiply(this.B); this.B = 0; this.AddNumber(longNumber); } else { checked { long multiplicationResult = this.B * number; this.B = multiplicationResult % X; if (multiplicationResult / X != 0) { if (this.A == null) { this.A = new LongNumber(multiplicationResult / X); } else { this.A.AddNumber(multiplicationResult / X); } } } } }
private void AddNumber(LongNumber number) { if (number.A != null) { if (this.A == null) { this.A = new LongNumber(0); } this.A.AddNumber(number.A); } this.AddNumber(number.B); }
private void AddNumber(long number) { if ((this.B + number) % X == this.B + number) { this.B += number; } else { long toA = number / X; long smallNumber = number % X; long oldB = this.B; this.B = (oldB + smallNumber) % X; toA += (oldB + smallNumber) / X; if (A == null) { this.A = new LongNumber(toA); } else { this.A.AddNumber(toA); } } }