public void DigitArray_DigitSumTest() { var digitArray = new DigitArray(1); Assert.AreEqual(1, digitArray.GetDigitSum()); digitArray = new DigitArray(125); Assert.AreEqual(8, digitArray.GetDigitSum()); }
public void DigitArray_DigitCountTest() { var digitArray = new DigitArray(1); Assert.AreEqual(1, digitArray.GetDigitCount()); digitArray = new DigitArray(125); Assert.AreEqual(3, digitArray.GetDigitCount()); }
public long Solve() { var digitArray = new DigitArray(1); for (int i = 2; i <= 100; i++) digitArray.MultiplyBy(i); return digitArray.GetDigitSum(); }
public long Solve() { var digitArray = new DigitArray(2); // first 2 for (var i = 1; i < 1000; i++) // 999 times digitArray.MultiplyBy(2); return digitArray.GetDigitSum(); }
public void DigitArray_MultiplyByTest() { var digitArray = new DigitArray(1); digitArray.MultiplyBy(9); Assert.AreEqual(1, digitArray.GetDigitCount()); Assert.AreEqual(9, digitArray.GetDigitSum()); digitArray = new DigitArray(125); digitArray.MultiplyBy(77); // result = 9625 Assert.AreEqual(4, digitArray.GetDigitCount()); Assert.AreEqual(22, digitArray.GetDigitSum()); }
public void DigitArray_OperatorPlusTest() { var d1 = new DigitArray(12345); var d2 = new DigitArray(54321); var d3 = d1 + d2; Assert.AreEqual(5, d3.GetDigitCount()); Assert.AreEqual(30, d3.GetDigitSum()); // now with carry d1 = new DigitArray(4267893); d2 = new DigitArray(9999999); d3 = d1 + d2; // 14267892 Assert.AreEqual(8, d3.GetDigitCount()); Assert.AreEqual(39, d3.GetDigitSum()); }
public void DigitArray_CloneTest() { var d = new DigitArray(9999999); var clone = d.Clone(); Assert.AreEqual(63, clone.GetDigitSum()); Assert.AreEqual(7, clone.GetDigitCount()); clone.MultiplyBy(2); // 19999998 // original is not modified Assert.AreEqual(63, d.GetDigitSum()); Assert.AreEqual(7, d.GetDigitCount()); // clone is modified Assert.AreEqual(63, clone.GetDigitSum()); Assert.AreEqual(8, clone.GetDigitCount()); }
public long Solve() { var previousFibNumber = new DigitArray(1); var fibNumber = new DigitArray(1); var currentNumber = 2; while (fibNumber.GetDigitCount() < 1000) { var temp = fibNumber.Clone(); fibNumber = fibNumber + previousFibNumber; previousFibNumber = temp; currentNumber++; } return currentNumber; }
public static DigitArray operator +(DigitArray d1, DigitArray d2) { var carry = 0; var result = new DigitArray(0); result.digitArray = d1.digitArray; var limit = Math.Max(d1.GetDigitCount(), d2.GetDigitCount()) + 1; for (var index = 0; index <= limit; index++) { result.digitArray[index] += d2.digitArray[index] + carry; if (result.digitArray[index] >= BASE) { carry = result.digitArray[index] / BASE; result.digitArray[index] %= BASE; } else carry = 0; } return result; }
public DigitArray Clone() { var clone = new DigitArray(0); this.digitArray.CopyTo(clone.digitArray, 0); return clone; }