diff --git a/Algorithms.Tests/Numeric/AdditionWithoutArithmeticsTests.cs b/Algorithms.Tests/Numeric/AdditionWithoutArithmeticsTests.cs new file mode 100644 index 00000000..708181ba --- /dev/null +++ b/Algorithms.Tests/Numeric/AdditionWithoutArithmeticsTests.cs @@ -0,0 +1,24 @@ +using System; +using System.Numerics; +using Algorithms.Numeric; +using NUnit.Framework; + +namespace Algorithms.Tests.Numeric; + +public static class AdditionWithoutArithmeticTests +{ + [TestCase(3, 5, 8)] + [TestCase(13, 5, 18)] + [TestCase(-7, 2, -5)] + [TestCase(0, -7, -7)] + [TestCase(-321, 0, -321)] + public static void CalculateAdditionWithoutArithmetic_Test(int first, int second, int expectedResult) + { + // Act + var result = AdditionWithoutArithmetic.CalculateAdditionWithoutArithmetic(first, second); + + // Assert + Assert.That(result, Is.EqualTo(expectedResult)); + } + +} diff --git a/Algorithms/Numeric/AdditionWithoutArithmetic.cs b/Algorithms/Numeric/AdditionWithoutArithmetic.cs new file mode 100644 index 00000000..253e1da9 --- /dev/null +++ b/Algorithms/Numeric/AdditionWithoutArithmetic.cs @@ -0,0 +1,29 @@ +using System; +using System.Numerics; + +namespace Algorithms.Numeric; + +/// +/// Add the integers without arithmetic operation. +/// +public static class AdditionWithoutArithmetic +{ + /// + /// Returns the sum of two integers. + /// + /// First number to add. + /// Second number to add. + /// Sum of the two numbers. + public static int CalculateAdditionWithoutArithmetic(int first, int second) + { + while (second != 0) + { + int c = first & second; // Carry + first ^= second; // Sum without carry + second = c << 1; // Carry shifted left + } + + return first; + } + +} diff --git a/README.md b/README.md index 93e048d2..478edb2f 100644 --- a/README.md +++ b/README.md @@ -67,7 +67,8 @@ find more than one implementation for the same objective but using different alg * [Extended Euclidean Algorithm](./Algorithms/ModularArithmetic/ExtendedEuclideanAlgorithm.cs) * [Modular Multiplicative Inverse](./Algorithms/ModularArithmetic/ModularMultiplicativeInverse.cs) * [Numeric](./Algorithms/Numeric) - * [Absolute](./Algorithms/Numeric/Abs.cs) + * [Absolute](./Algorithms/Numeric/Abs.cs) + * [Addition Without Arithmetic](./Algorithms/Numeric/AdditionWithoutArithmetic.cs) * [Aliquot Sum Calculator](./Algorithms/Numeric/AliquotSumCalculator.cs) * [Amicable Numbers Checker](./Algorithms/Numeric/AmicableNumbersChecker.cs) * [Decomposition](./Algorithms/Numeric/Decomposition)