public static LongNumber operator -(LongNumber number1, LongNumber number2) { if (number1 < number2) { return(null); } if (number1 == number2) { return(new LongNumber(0)); } LongNumber result = new LongNumber(0); for (int i = 0; i < number1.Length; i++) { if (i < number1.Length - 1) { result.Push(0); (result)[i + 1] = (result)[i + 1] - 1; (result)[i] = (result)[i] + 10 + number1[i]; } else { result[i] = result[i] + number1[i]; } if (i < number2.Length) { result[i] = result[i] - number2[i]; } if (result[i] / 10 > 0 && i < number1.Length - 1) { (result)[i + 1] = (result)[i + 1] + 1; result[i] = result[i] % 10; } } int j = result.Length - 1; while (result[j] <= 0 && j > 0) { result.Pop(); j--; } return(result); }
public static LongNumber operator %(LongNumber number1, LongNumber number2) { if (number1 == number2) { return(new LongNumber(0)); } if (number1 < number2) { return(Copy(number1)); } int i = number1.Length - 1; LongNumber temp = new LongNumber(); while (i >= 0) { temp.InsertToStart(number1[i]); i--; if (temp[temp.Length - 1] == 0 && temp.Length > 1) { temp.Pop(); } while (temp < number2 && i >= 0) { temp.InsertToStart(number1[i]); i--; } while (temp >= number2) { temp = temp - number2; } } return(temp); }