The challenge
Return the century of the input year. The input will always be a 4 digit string, so there is no need for validation.
Examples
"1999" --> "20th"
"2011" --> "21st"
"2154" --> "22nd"
"2259" --> "23rd"
"1124" --> "12th"
"2000" --> "20th"
The solution in Java code
Option 1:
public class Solution{
public static String whatCentury(int year) {
int century = (year + 99) / 100;
if (century / 10 == 1) return century + "th";
switch(century % 10) {
case 1: return century + "st";
case 2: return century + "nd";
case 3: return century + "rd";
default: return century + "th";
}
}
}
Option 2:
public class Solution{
public static String whatCentury(int year) {
int c = (int)Math.ceil(year/100.), a = c%100, b = c%10;
return c + (10 < a && a < 14 ? "th" : b == 1 ? "st" : b == 2 ? "nd" : b == 3 ? "rd" : "th");
}
}
Option 3:
public class Solution{
public static String whatCentury(int year) {
int century = year < 100 ? 1 : year % 100 == 0 ? year / 100 : year / 100 + 1;
String postfix = "th";
if (century < 11 || century > 20) {
switch (century % 10) {
case 1:
postfix = "st";
break;
case 2:
postfix = "nd";
break;
case 3:
postfix = "rd";
break;
}
}
return century + postfix;
}
}
Test cases to validate our solution
import org.junit.Test;
import static org.junit.Assert.assertEquals;
import org.junit.runners.JUnit4;
public class SolutionTest {
@Test
public void testSomething() {
assertEquals("20th", Solution.whatCentury(1999));
assertEquals("21st", Solution.whatCentury(2011));
assertEquals("22nd", Solution.whatCentury(2154));
assertEquals("23rd", Solution.whatCentury(2259));
}
}