What Century Is It in Java


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));
    }
}