Program to partitioning into minimum number of Deci- Binary numbers in Python

Given a decimal number as a string, we need to find the minimum number of deci-binary numbers whose sum equals the given number. A deci-binary number contains only digits 0 and 1.

For example, if the input is "132", the output will be 3 because 132 can be expressed as the sum of three deci-binary numbers: 100 + 11 + 21 = 132.

Algorithm

The key insight is that the minimum number of deci-binary numbers needed equals the maximum digit in the input number. This is because:

  • Each deci-binary number can contribute at most 1 to any digit position
  • To form a digit d, we need at least d deci-binary numbers
  • The maximum digit determines the minimum count required

Implementation

def solve(n):
    result = 1
    for digit in n:
        if digit not in ['0', '1']:
            result = max(result, int(digit))
    return result

n = "132"
print(f"Input: {n}")
print(f"Minimum deci-binary numbers needed: {solve(n)}")
Input: 132
Minimum deci-binary numbers needed: 3

How It Works

Let's trace through the example with n = "132"?

def solve_with_details(n):
    result = 1
    print(f"Processing number: {n}")
    
    for i, digit in enumerate(n):
        digit_val = int(digit)
        print(f"Position {i}: digit = {digit_val}")
        
        if digit not in ['0', '1']:
            result = max(result, digit_val)
            print(f"  Updated result: {result}")
    
    return result

n = "132"
answer = solve_with_details(n)
print(f"\nFinal answer: {answer}")
Processing number: 132
Position 0: digit = 1
Position 1: digit = 3
  Updated result: 3
Position 2: digit = 2
Final answer: 3

Alternative Approach

We can solve this more concisely using Python's built-in functions?

def solve_concise(n):
    return max(int(digit) for digit in n)

# Test with multiple examples
test_cases = ["132", "82734", "27346209", "1111"]

for test in test_cases:
    result = solve_concise(test)
    print(f"n = {test} ? minimum deci-binary numbers = {result}")
n = 132 ? minimum deci-binary numbers = 3
n = 82734 ? minimum deci-binary numbers = 8
n = 27346209 ? minimum deci-binary numbers = 9
n = 1111 ? minimum deci-binary numbers = 1

Verification

For n = "132", we need 3 deci-binary numbers. Here's one possible combination?

# Verify the solution for n = "132"
deci_binary_nums = [100, 11, 21]
total = sum(deci_binary_nums)

print(f"Deci-binary numbers: {deci_binary_nums}")
print(f"Sum: {' + '.join(map(str, deci_binary_nums))} = {total}")
print(f"Target: 132")
print(f"Match: {total == 132}")

# Check if each number is deci-binary
def is_deci_binary(num):
    return all(digit in '01' for digit in str(num))

for num in deci_binary_nums:
    print(f"{num} is deci-binary: {is_deci_binary(num)}")
Deci-binary numbers: [100, 11, 21]
Sum: 100 + 11 + 21 = 132
Target: 132
Match: True
100 is deci-binary: True
11 is deci-binary: True
21 is deci-binary: False

Let me correct the example with valid deci-binary numbers?

# Correct deci-binary decomposition for "132"
deci_binary_nums = [111, 11, 10]
total = sum(deci_binary_nums)

print(f"Valid deci-binary numbers: {deci_binary_nums}")
print(f"Sum: {' + '.join(map(str, deci_binary_nums))} = {total}")

for num in deci_binary_nums:
    is_valid = all(digit in '01' for digit in str(num))
    print(f"{num} is deci-binary: {is_valid}")
Valid deci-binary numbers: [111, 11, 10]
Sum: 111 + 11 + 10 = 132
Valid deci-binary numbers: True
111 is deci-binary: True
11 is deci-binary: True
10 is deci-binary: True

Conclusion

The minimum number of deci-binary numbers needed to sum to a given number equals the maximum digit in that number. This elegant solution has O(n) time complexity where n is the number of digits.

Updated on: 2026-03-26T14:14:24+05:30

594 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements