public static Big Mul(Big big1, Big big2) { return(new Big() { Neg = big1.Neg != big2.Neg, Num = Mul(big1.Num, big2.Num) }); }
public static Big Mul(Big big, int k) { return(new Big() { Neg = big.Neg != (k < 0), Num = Mul(big.Num, Math.Abs(k)) }); }
public static Big Power(Big big, int k) { return(new Big() { Neg = big.Neg && (k % 2 != 0), Num = Power(big.Num, k) }); }
public static Big Quotient(Big big, int k) { return(new Big() { Neg = big.Neg != (k < 0), Num = Quotient(big.Num, Math.Abs(k)) }); }
static Big AddSub(Big big1, Big big2, bool add) { if (add) { return new Big() { Neg = big1.Neg, Num = Big.Sum(big1.Num, big2.Num) } } ; else { int cmp = Big.Compare(big1.Num, big2.Num); switch (cmp) { case -1: return(new Big() { Neg = !big1.Neg, Num = Big.Dif(big2.Num, big1.Num) }); case 1: return(new Big() { Neg = big1.Neg, Num = Big.Dif(big1.Num, big2.Num) }); } return(new Big(0)); } }
public static Big Fact(int n) { Big big = new Big(1); for (int i = 2; i <= n; i++) { big = Mul(big, i); } return(big); }
public static int Compare(Big big1, Big big2) { if (big1.Neg != big2.Neg) { return(big1.Neg ? -1 : 1); } if (big1.Neg) { return(Compare(big2.Num, big1.Num)); } return(Compare(big1.Num, big2.Num)); }
public Big(Big big) { Neg = big.Neg; Num = new List <int>(big.Num); }
public static int Remainder(Big big, int k) { return(Remainder(big.Num, Math.Abs(k))); }
public static Big Sub(Big big1, Big big2) { return(AddSub(big1, big2, big1.Neg != big2.Neg)); }
public Big Mul(Big big) { return(Mul(this, big)); }
public Big Sub(Big big) { return(Sub(this, big)); }
public Big Add(Big big) { return(Add(this, big)); }
public int CompareTo(Big big) { return(Compare(this, big)); }