Software Engineering

# How to Return the Closest Number Multiple of 10 in C

## The challenge#

Given a number return the closest number to it that is divisible by 10.

Example input:

``````22
25
37
``````

Expected output:

``````20
30
40
``````

## The solution in C#

Option 1:

``````#include <math.h>

int round_to_10 (int n) {
return round(n / 10.0) * 10;
}
``````

Option 2:

``````int round_to_10(int n) {
return (n + 5) / 10 * 10;
}
``````

Option 3:

``````int round_to_10 (int n) {
int r = n % 10;
if (r > 0)
return r < 5 ? n - r : n - r + 10;
else if (r < 0)
return r > -5 ? n - r : n - r - 10;
return n;
}
``````

## Test cases to validate our solution#

``````#include <criterion/criterion.h>

extern int round_to_10 (int n);
static void do_test (int n, int expected);

Test(tests_suite, sample_tests)
{
do_test(0, 0);
do_test(10, 10);
do_test(22, 20);
do_test(25, 30);
do_test(37, 40);
}

static void do_test (int n, int expected)
{
int actual = round_to_10(n);
cr_assert_eq(actual, expected,
"for n = %d, expected %d, but got %d",
n, expected, actual
);
}
``````