コード例 #1
0
        public void DigitArray_DigitSumTest()
        {
            var digitArray = new DigitArray(1);
            Assert.AreEqual(1, digitArray.GetDigitSum());

            digitArray = new DigitArray(125);
            Assert.AreEqual(8, digitArray.GetDigitSum());
        }
コード例 #2
0
        public void DigitArray_DigitCountTest()
        {
            var digitArray = new DigitArray(1);
            Assert.AreEqual(1, digitArray.GetDigitCount());

            digitArray = new DigitArray(125);
            Assert.AreEqual(3, digitArray.GetDigitCount());
        }
コード例 #3
0
ファイル: Problem020.cs プロジェクト: AlphaGit/project-euler
        public long Solve()
        {
            var digitArray = new DigitArray(1);
            for (int i = 2; i <= 100; i++)
                digitArray.MultiplyBy(i);

            return digitArray.GetDigitSum();
        }
コード例 #4
0
ファイル: Problem016.cs プロジェクト: AlphaGit/project-euler
        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();
        }
コード例 #5
0
        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());
        }
コード例 #6
0
        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());
        }
コード例 #7
0
        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());
        }
コード例 #8
0
ファイル: Problem025.cs プロジェクト: AlphaGit/project-euler
        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;
        }
コード例 #9
0
ファイル: DigitArray.cs プロジェクト: AlphaGit/project-euler
        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;
        }
コード例 #10
0
ファイル: DigitArray.cs プロジェクト: AlphaGit/project-euler
 public DigitArray Clone()
 {
     var clone = new DigitArray(0);
     this.digitArray.CopyTo(clone.digitArray, 0);
     return clone;
 }