Solution to the clumsy factorial problem in JavaScript

Normally, the factorial of a positive integer n is the product of all positive integers less than or equal to n. For example, factorial(10) = 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1.

We instead make a clumsy factorial: using the integers in decreasing order, we swap out the multiply operations for a fixed rotation of operations: multiply (*), divide (/), add (+) and subtract (-) in this order.

For example, clumsy(10) = 10 * 9 / 8 + 7 - 6 * 5 / 4 + 3 - 2 * 1. However, these operations are still applied using the usual order of operations of arithmetic: we do all multiplication and division steps before any addition or subtraction steps, and multiplication and division steps are processed left to right.

Understanding the Pattern

The clumsy factorial follows a specific pattern every 4 numbers:

  • First number: multiply
  • Second number: divide
  • Third number: add
  • Fourth number: subtract

For clumsy(10): 10 * 9 / 8 + 7 - 6 * 5 / 4 + 3 - 2 * 1

Solution

const clumsy = num => {
    let k = num;
    let res = 0, temp = 1;
    
    while (k > 0) {
        temp = k;
        
        // Multiply: k * (k-1)
        if (k - 1 > 0) {
            temp *= (k - 1);
        }
        
        // Divide: temp / (k-2)
        if (k - 2 > 0) {
            temp /= (k - 2);
        }
        
        // Add/Subtract: handle (k-3)
        if (k - 3 > 0) {
            if (k === num) {
                // First group: add
                temp += (k - 3);
            } else {
                // Subsequent groups: subtract
                temp -= (k - 3);
            }
        }
        
        // Accumulate result
        if (k === num) {
            res = temp;  // First group
        } else {
            res = res - temp;  // Subtract subsequent groups
        }
        
        k = k - 4;  // Move to next group of 4
    }
    
    return res;
};

console.log(clumsy(4));   // 4 * 3 / 2 + 1
console.log(clumsy(10));  // 10 * 9 / 8 + 7 - 6 * 5 / 4 + 3 - 2 * 1
console.log(clumsy(16));  // Complex expression with multiple groups
console.log(clumsy(5));   // 5 * 4 / 3 + 2 - 1
7
11.75
16.609523809523807
7.666666666666668

How It Works

The algorithm processes numbers in groups of 4, starting from the input number and working downward:

  1. Multiply and Divide: First two operations (k * (k-1) / (k-2))
  2. Add/Subtract: For the first group, add (k-3). For subsequent groups, subtract (k-3)
  3. Group Processing: Each complete group is subtracted from the running result (except the first)
  4. Decrement: Move to the next group by subtracting 4 from k

Step-by-Step Example

For clumsy(10):

  • First group (10,9,8,7): 10 * 9 / 8 + 7 = 18.25
  • Second group (6,5,4,3): 6 * 5 / 4 - 3 = 4.5
  • Third group (2,1): 2 * 1 = 2
  • Result: 18.25 - 4.5 - 2 = 11.75

Conclusion

The clumsy factorial algorithm groups numbers in sets of 4 and applies operations in a fixed rotation pattern. The key insight is handling the first group differently (addition) versus subsequent groups (subtraction) to maintain the correct mathematical order.

Updated on: 2026-03-15T23:18:59+05:30

419 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements