From 64f2f42e62c882e5a7cac8e0c2e4358bb4e2ebff Mon Sep 17 00:00:00 2001 From: thiagohpr Date: Fri, 18 Oct 2024 11:03:00 -0300 Subject: [PATCH 1/4] Add addition without arithmetic algorithm --- .../AdditionWithoutArithmeticsTests.cs | 23 ++++++++++++++++ .../Numeric/AdditionWithoutArithmetic.cs | 27 +++++++++++++++++++ README.md | 1 + 3 files changed, 51 insertions(+) create mode 100644 Algorithms.Tests/Numeric/AdditionWithoutArithmeticsTests.cs create mode 100644 Algorithms/Numeric/AdditionWithoutArithmetic.cs diff --git a/Algorithms.Tests/Numeric/AdditionWithoutArithmeticsTests.cs b/Algorithms.Tests/Numeric/AdditionWithoutArithmeticsTests.cs new file mode 100644 index 00000000..65150ba6 --- /dev/null +++ b/Algorithms.Tests/Numeric/AdditionWithoutArithmeticsTests.cs @@ -0,0 +1,23 @@ +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)); + } +} \ No newline at end of file diff --git a/Algorithms/Numeric/AdditionWithoutArithmetic.cs b/Algorithms/Numeric/AdditionWithoutArithmetic.cs new file mode 100644 index 00000000..fd49eed1 --- /dev/null +++ b/Algorithms/Numeric/AdditionWithoutArithmetic.cs @@ -0,0 +1,27 @@ +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 f13516de..84731ef9 100644 --- a/README.md +++ b/README.md @@ -67,6 +67,7 @@ find more than one implementation for the same objective but using different alg * [Modular Multiplicative Inverse](./Algorithms/ModularArithmetic/ModularMultiplicativeInverse.cs) * [Numeric](./Algorithms/Numeric) * [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) From 0c69715c9ea31997f3f7255dfe6236ca8f05e53d Mon Sep 17 00:00:00 2001 From: thiagohpr Date: Tue, 22 Oct 2024 09:18:42 -0300 Subject: [PATCH 2/4] Blank line after closing bracket --- Algorithms.Tests/Numeric/AdditionWithoutArithmeticsTests.cs | 3 ++- Algorithms/Numeric/AdditionWithoutArithmetic.cs | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/Algorithms.Tests/Numeric/AdditionWithoutArithmeticsTests.cs b/Algorithms.Tests/Numeric/AdditionWithoutArithmeticsTests.cs index 65150ba6..708181ba 100644 --- a/Algorithms.Tests/Numeric/AdditionWithoutArithmeticsTests.cs +++ b/Algorithms.Tests/Numeric/AdditionWithoutArithmeticsTests.cs @@ -20,4 +20,5 @@ public static void CalculateAdditionWithoutArithmetic_Test(int first, int second // Assert Assert.That(result, Is.EqualTo(expectedResult)); } -} \ No newline at end of file + +} diff --git a/Algorithms/Numeric/AdditionWithoutArithmetic.cs b/Algorithms/Numeric/AdditionWithoutArithmetic.cs index fd49eed1..253e1da9 100644 --- a/Algorithms/Numeric/AdditionWithoutArithmetic.cs +++ b/Algorithms/Numeric/AdditionWithoutArithmetic.cs @@ -22,6 +22,8 @@ public static int CalculateAdditionWithoutArithmetic(int first, int second) first ^= second; // Sum without carry second = c << 1; // Carry shifted left } + return first; } + } From 1eea69dc4d7a6aaba28e065dab599f8ec5230d6e Mon Sep 17 00:00:00 2001 From: thiagohpr Date: Tue, 22 Oct 2024 17:27:50 -0300 Subject: [PATCH 3/4] Removing blank lines before closing bracket --- Algorithms.Tests/Numeric/AdditionWithoutArithmeticsTests.cs | 3 +-- Algorithms/Numeric/AdditionWithoutArithmetic.cs | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/Algorithms.Tests/Numeric/AdditionWithoutArithmeticsTests.cs b/Algorithms.Tests/Numeric/AdditionWithoutArithmeticsTests.cs index 708181ba..65150ba6 100644 --- a/Algorithms.Tests/Numeric/AdditionWithoutArithmeticsTests.cs +++ b/Algorithms.Tests/Numeric/AdditionWithoutArithmeticsTests.cs @@ -20,5 +20,4 @@ public static void CalculateAdditionWithoutArithmetic_Test(int first, int second // Assert Assert.That(result, Is.EqualTo(expectedResult)); } - -} +} \ No newline at end of file diff --git a/Algorithms/Numeric/AdditionWithoutArithmetic.cs b/Algorithms/Numeric/AdditionWithoutArithmetic.cs index 253e1da9..3aebd5d3 100644 --- a/Algorithms/Numeric/AdditionWithoutArithmetic.cs +++ b/Algorithms/Numeric/AdditionWithoutArithmetic.cs @@ -25,5 +25,4 @@ public static int CalculateAdditionWithoutArithmetic(int first, int second) return first; } - -} +} \ No newline at end of file From 463b389d7b77946a390340ea9e233902ab206d0a Mon Sep 17 00:00:00 2001 From: thiagohpr Date: Wed, 23 Oct 2024 07:33:45 -0300 Subject: [PATCH 4/4] Adding newline ate the EOF --- Algorithms.Tests/Numeric/AdditionWithoutArithmeticsTests.cs | 2 +- Algorithms/Numeric/AdditionWithoutArithmetic.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Algorithms.Tests/Numeric/AdditionWithoutArithmeticsTests.cs b/Algorithms.Tests/Numeric/AdditionWithoutArithmeticsTests.cs index 65150ba6..a9eec6b1 100644 --- a/Algorithms.Tests/Numeric/AdditionWithoutArithmeticsTests.cs +++ b/Algorithms.Tests/Numeric/AdditionWithoutArithmeticsTests.cs @@ -20,4 +20,4 @@ public static void CalculateAdditionWithoutArithmetic_Test(int first, int second // Assert Assert.That(result, Is.EqualTo(expectedResult)); } -} \ No newline at end of file +} diff --git a/Algorithms/Numeric/AdditionWithoutArithmetic.cs b/Algorithms/Numeric/AdditionWithoutArithmetic.cs index 3aebd5d3..7ec294b7 100644 --- a/Algorithms/Numeric/AdditionWithoutArithmetic.cs +++ b/Algorithms/Numeric/AdditionWithoutArithmetic.cs @@ -25,4 +25,4 @@ public static int CalculateAdditionWithoutArithmetic(int first, int second) return first; } -} \ No newline at end of file +}