예제 #1
0
파일: Integer.cs 프로젝트: kOVC/CodeJam
 private static bool _isZero(Integer n)
 {
     return n._digits != null && n._digits.Count == 1 && n._digits[0] == 0;
 }
예제 #2
0
파일: Integer.cs 프로젝트: kOVC/CodeJam
 public bool Equals(Integer i)
 {
     if (i._sign != _sign) { return false; }
     return _magCmpEQ(_digits, i._digits);
 }
예제 #3
0
파일: Integer.cs 프로젝트: kOVC/CodeJam
 public override bool Equals(object obj)
 {
     if (obj is Integer) { return Equals((Integer)obj); }
     else {
         Integer i = new Integer();
         try { i = new Integer(obj.ToString()); }
         catch { return false; }
         return Equals(i);
     }
 }
예제 #4
0
파일: Integer.cs 프로젝트: kOVC/CodeJam
 public static Integer New(Integer n)
 {
     Integer r = new Integer(); r._sign = n._sign; r._digits = new List<byte>(n._digits.ToArray()); return r;
 }
예제 #5
0
파일: Integer.cs 프로젝트: kOVC/CodeJam
 public static Integer Subtract(Integer n1, Integer n2)
 {
     return Add(n1, -n2);
 }
예제 #6
0
파일: Integer.cs 프로젝트: kOVC/CodeJam
 public static Integer Multiply(Integer n1, Integer n2)
 {
     return new Integer(_magMul(n1._digits, n2._digits), n1._sign == n2._sign ? Sign.Positive : Sign.Negative);
 }
예제 #7
0
파일: Integer.cs 프로젝트: kOVC/CodeJam
 //Factory Methods
 public static Integer New(string s)
 {
     if (_valid(s)) {
         Integer n = new Integer();
         int i = 0;
         if (s.StartsWith("+") || s.StartsWith("-")) { n._sign = _toSign(s[0]); i = 1; }
         else { n._sign = Sign.Positive; }
         while (i < s.Length && s[i] == '0') { i++; }
         if (i == s.Length) { return n; }
         n._digits = new List<byte>(s.Length - i);
         for (int j = 0; j < s.Length - i; j++) { n._digits.Add(0); }
         for (int x = s.Length - 1; x >= i; x--) { n._digits[s.Length - 1 - x] = _byte(s[x]); }
         return n;
     }
     else { throw new Exception("String could not be parsed into a valid Integer!"); }
 }
예제 #8
0
파일: Integer.cs 프로젝트: kOVC/CodeJam
 public static Integer Divide(Integer n1, Integer n2)
 {
     return new Integer(_magDiv(n1._digits, n2._digits), n1._sign == n2._sign ? Sign.Positive : Sign.Negative);
 }
예제 #9
0
파일: Integer.cs 프로젝트: kOVC/CodeJam
 //Mathematical Operators
 public static Integer Add(Integer n1, Integer n2)
 {
     if (n1._sign == n2._sign) { return new Integer(_magAdd(n1._digits, n2._digits), n1._sign); }
     else {
         if (_magCmpEQ(n1._digits, n2._digits)) { return new Integer(new List<byte>(new byte[] { 0 }), Sign.Positive); }
         List<byte> larger, smaller; Sign sign = Sign.Positive;
         if (_magCmpGT(n1._digits, n2._digits)) { larger = n1._digits; smaller = n2._digits; sign = n1._sign; }
         else { larger = n2._digits; smaller = n1._digits; sign = n2._sign; }
         return new Integer(_magSub(larger, smaller), sign);
     }
 }
예제 #10
0
파일: Integer.cs 프로젝트: kOVC/CodeJam
 public Integer(Integer copy)
 {
     _copyInit(New(copy));
 }
예제 #11
0
파일: Integer.cs 프로젝트: kOVC/CodeJam
 public static Integer operator -(Integer n)
 {
     Integer res = new Integer(n); res._sign = res._sign == Sign.Positive ? Sign.Negative : Sign.Positive; return res;
 }
예제 #12
0
파일: Integer.cs 프로젝트: kOVC/CodeJam
 private void _copyInit(Integer n)
 {
     _sign = n._sign; _digits = n._digits;
 }