How to Find the Maximum Multiple in C


The challenge

Given a Divisor and a Bound , Find the largest integer N , Such That ,

Conditions :

  • N is divisible by divisor
  • N is less than or equal to bound
  • N is greater than 0.

Notes

  • The parameters (divisor, bound) passed to the function are only positive values .
  • It’s guaranteed that a divisor is Found .Input » Output Examples
maxMultiple (2,7) ==> return (6)

Explanation:

(6) is divisible by (2) , (6) is less than or equal to bound (7) , and (6) is > 0 .


maxMultiple (10,50)  ==> return (50)

Explanation:

(50) is divisible by (10) , (50) is less than or equal to bound (50) , and (50) is > 0 .*


maxMultiple (37,200) ==> return (185)

Explanation:

(185) is divisible by (37) , (185) is less than or equal to bound (200) , and (185) is > 0 .

The solution in C

Option 1:

int maxMultiple(int divisor, int bound)  {
    return bound / divisor * divisor;
}

Option 2:

int maxMultiple(int divisor, int bound) {
    return bound - bound % divisor;
}

Option 3:

int maxMultiple(int divisor, int bound)  {
    while(bound>0) {
      if(bound%divisor==0)
      break;
      else
      bound--;
    }
  return bound;
}

Test cases to validate our solution

#include <criterion/criterion.h>

int maxMultiple(int divisor, int bound);

Test(Maximum_Multiple, Check_Small_Positives)
{
    cr_assert_eq(maxMultiple(2,7),   6);
    cr_assert_eq(maxMultiple(3,10),  9);
    cr_assert_eq(maxMultiple(7,17), 14);
}
Test(Maximum_Multiple, Larger_Positives)
{
    cr_assert_eq(maxMultiple(10,50),   50);
    cr_assert_eq(maxMultiple(37,200), 185);
    cr_assert_eq(maxMultiple(7,100),   98);
}