Patterns/Part VI - Math & Discrete/Number Tricks

Pattern Reference

Number Tricks

"Numerical properties, digital root, self numbers, happy numbers, narcissistic numbers, Kaprekar, Ulam, perfect numbers."

Loading...

Deep Dive Tutorial

Digit extraction: last digit = n % 10, remove last digit = Math.floor(n/10). Reverse a number: pop digits and push into result. Palindrome check: reverse second half and compare with first half (handles even/odd length). Base conversion: repeated division by base gives digits in reverse. Roman numerals: scan left to right, subtract when smaller value appears before larger.

Reverse integer and palindrome number patterns
// Reverse integer — handle overflow
function reverseInt(x) {
    let rev = 0;
    while (x !== 0) {
        const digit = x % 10; // extracts last digit (negative for negative x)
        x = Math.trunc(x / 10);
        rev = rev * 10 + digit;
    }
    // Check 32-bit signed integer overflow
    if (rev < -(2**31) || rev > 2**31 - 1) return 0;
    return rev;
}

// Palindrome number — reverse second half
function isPalindrome(x) {
    if (x < 0 || (x % 10 === 0 && x !== 0)) return false;
    let rev = 0;
    while (x > rev) {
        rev = rev * 10 + x % 10;
        x = Math.floor(x / 10);
    }
    return x === rev || x === Math.floor(rev / 10); // even or odd length
}

Worked Problems

hash
Digit extraction idioms:
- Last digit: n % 10
- Remove last digit: Math.trunc(n / 10) (trunc for negatives!)
- Palindrome check: reverse second half, compare (handles overflow)
- Base-k encoding: repeated modulo with reversed-digit reconstruction

1-indexed base-26 (Excel columns): Subtract 1 before modulo to convert from 1-indexed (A=1) to 0-indexed (A=0). Standard base conversion: subtract 0.

Overflow trick for palindrome: Instead of reversing the full number (overflow risk), only reverse the second half and compare. Stop when reversed ≥ remaining.