The challenge
Complete the function that takes an odd integer (0 < n < 1000000
) which is the difference between two consecutive perfect squares, and return these squares as a string in the format "bigger-smaller"
.
Examples
9 --> "25-16"
5 --> "9-4"
7 --> "16-9"
The solution in Java code
Option 1:
public class Solution {
public static String findSquares(final int n) {
final long a = (n + 1) / 2;
final long b = a - 1;
return String.format("%d-%d", a * a, b * b);
}
}
Option 2:
interface Solution {
static String findSquares(long n) {
return (n /= 2) * n + 2 * n + 1 + "-" + n * n;
}
}
Option 3:
public class Solution{
public static String findSquares(int n){
long n1 = n/2;
long n2 = n1+1;
return String.valueOf(n2*n2)+"-"+ String.valueOf(n1*n1);
}
}
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 testBasicNumbers() {
assertEquals("25-16",Solution.findSquares(9));
}
@Test
public void testSmallerNumbers() {
assertEquals("1-0",Solution.findSquares(1));
}
@Test
public void testBiggerNumbers() {
assertEquals("891136-889249",Solution.findSquares(1887));
assertEquals("2499600016-2499500025",Solution.findSquares(99991));
}
}