Start learning free

LESSON 83 OF 409 · CONDITIONAL STATEMENTS - CHALLENGES

Find the absolute difference in C++

Practice Read the full explanation

The absolute difference is a measure of the difference between two numbers but expressed as a positive number.

In other words, it’s taking the difference between two values (x - y) and then calculating the absolute value of the result.

Create a function (called as absDiff in the examples below; use the name from the starter code) that takes in two numbers a and b and returns their absolute difference.

Examples:

absDiff(3, 0) ➞ 3

absDiff(0, 3) ➞ 3

absDiff(10, -1) ➞ 11

absDiff(-5, -7) ➞ 2

absDiff(6, -6) ➞ 12

absDiff(7, 7) ➞ 0

Note:

Do not use the absolute value function provided by C++ (it will defeat the purpose of the challenge)


Hints:


If a is less than b, the absolute difference equals b - a. What if a is greater than or equal to b?

If a < b, we should return b - a. Otherwise, we should return a - b. We can use an if statement to put this in code.
STEP 1 OF 3
    Ctrl + Enter to check

    C++ · CONDITIONAL STATEMENTS - CHALLENGES

    Recreating Absolute Difference in C++, explained

    Understanding the Problem

    The core challenge of this problem is to compute the absolute difference between two numbers without using the built-in abs() function. The absolute difference is always a non-negative number, regardless of the order of the input numbers.

    This problem is significant in various applications such as calculating distances, error margins, and differences in data values. A common pitfall is to forget that the absolute difference must always be positive.

    Approach

    To solve this problem, we need to consider the following:

    • If a is less than b, the absolute difference is b - a.
    • If a is greater than or equal to b, the absolute difference is a - b.

    We can implement this logic using a simple if statement.

    Naive Solution

    A naive solution would involve checking the condition and returning the appropriate difference:

    
    // Naive solution to find the absolute difference
    double absDiff(double a, double b) {
        if (a < b) {
            return b - a;
        } else {
            return a - b;
        }
    }
    

    This solution is straightforward and works correctly, but it can be optimized further.

    Optimized Solution

    An optimized solution can use the ternary operator to make the code more concise:

    
    // Optimized solution using ternary operator
    double absDiff(double a, double b) {
        return (a < b) ? (b - a) : (a - b);
    }
    

    This approach is more compact and equally efficient.

    Algorithm

    Here is a step-by-step breakdown of the algorithm:

    1. Compare the two numbers a and b.
    2. If a is less than b, return b - a.
    3. Otherwise, return a - b.

    The optimized solution uses the ternary operator to achieve the same logic in a single line of code.

    Code Implementation

    
    // Function to find the absolute difference between two numbers
    double absDiff(double a, double b) {
        // Using ternary operator for a concise solution
        return (a < b) ? (b - a) : (a - b);
    }
    

    This code is clean, readable, and follows best practices. The ternary operator makes the solution concise without sacrificing clarity.

    Complexity Analysis

    The time complexity of this solution is O(1) because it involves a constant number of operations regardless of the input values.

    The space complexity is also O(1) as no additional space is required beyond the input variables.

    Edge Cases

    Potential edge cases include:

    • Both numbers are the same (e.g., absDiff(1.5, 1.5) should return 0).
    • One or both numbers are negative (e.g., absDiff(-5, -7) should return 2).
    • One number is zero (e.g., absDiff(0, 3) should return 3).

    These edge cases are handled correctly by the provided solution.

    Testing

    To test the solution comprehensively, consider the following test cases:

    absDiff(3, 0) ➞ 3
    absDiff(0, 3) ➞ 3
    absDiff(10, -1) ➞ 11
    absDiff(-5, -7) ➞ 2
    absDiff(6, -6) ➞ 12
    absDiff(1.5, 1.5) ➞ 0
    

    These test cases cover a range of scenarios, including positive numbers, negative numbers, and zero.

    Thinking and Problem-Solving Tips

    When approaching such problems, consider the following tips:

    • Understand the problem requirements and constraints thoroughly.
    • Break down the problem into smaller, manageable parts.
    • Consider edge cases and how they might affect your solution.
    • Write clean, readable code and use comments to explain your logic.
    • Practice solving similar problems to improve your problem-solving skills.

    Conclusion

    In this blog post, we discussed how to find the absolute difference between two numbers without using the built-in abs() function in C++. We explored a naive solution and an optimized solution, provided a detailed algorithm, and analyzed the complexity. We also covered edge cases and testing strategies.

    Understanding and solving such problems is crucial for developing strong problem-solving skills. Practice regularly and explore further to enhance your coding abilities.

    Additional Resources

    For further reading and practice, consider the following resources:

    Keep going with C++About 340 step-by-step lessons, from your first line of code to coding interviews. Free to start.
    Start learning free