/* package whatever; // don't place package name! */
import java.math.BigInteger;
class Scratch {
boolean neg1 = v1.startsWith("-");
boolean neg2 = v2.startsWith("-");
return neg1 ? (neg2 ? -comparePositives(v1.substring(1), v2.substring(1)) : -1)
: (neg2 ? 1 : comparePositives(v1, v2));
}
// Is one longer?
if (v1.length() != v2.length())
return v1.length() < v2.length() ? -1 : 1;
// Both empty?
if (v1.isEmpty())
return 0;
// First digit differs?
if (v1.charAt(0) != v2.charAt(0))
return v1.charAt(0) < v2.charAt(0) ? -1 : 1;
// Recurse on rest of number
return comparePositives(v1.substring(1), v2.substring(1));
}
public static void main
(String[] args
) { "-4681282181239921821823815829",
"-9223372036854775809", // MIN_VALUE-1
"-123456",
"-55555",
"-1",
"0",
"1",
"55555",
"123456",
"9223372036854775808", // MAX_VALUE+1
"-4681282181239921821823815829"
};
for (String testVal1
: testCases
) { for (String testVal2
: testCases
) { int actual = compare(testVal1, testVal2);
System.
out.
printf("%30s %30s %d %d%n", testVal1, testVal2, expected, actual
); if (expected != actual) {
System.
err.
printf("%30s%n", testVal1
); System.
err.
printf("%30s%n", testVal2
); }
}
}
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEubWF0aC5CaWdJbnRlZ2VyOwoKY2xhc3MgU2NyYXRjaCB7CiAgICAKICAgIHN0YXRpYyBpbnQgY29tcGFyZShTdHJpbmcgdjEsIFN0cmluZyB2MikgewogICAgICAgIGJvb2xlYW4gbmVnMSA9IHYxLnN0YXJ0c1dpdGgoIi0iKTsKICAgICAgICBib29sZWFuIG5lZzIgPSB2Mi5zdGFydHNXaXRoKCItIik7CiAgICAgICAgcmV0dXJuIG5lZzEgPyAobmVnMiA/IC1jb21wYXJlUG9zaXRpdmVzKHYxLnN1YnN0cmluZygxKSwgdjIuc3Vic3RyaW5nKDEpKSA6IC0xKQogICAgICAgICAgICAgICAgICAgIDogKG5lZzIgPyAxIDogY29tcGFyZVBvc2l0aXZlcyh2MSwgdjIpKTsKICAgIH0KICAgIAogICAgc3RhdGljIGludCBjb21wYXJlUG9zaXRpdmVzKFN0cmluZyB2MSwgU3RyaW5nIHYyKSB7CiAgICAgICAgLy8gSXMgb25lIGxvbmdlcj8KICAgICAgICBpZiAodjEubGVuZ3RoKCkgIT0gdjIubGVuZ3RoKCkpCiAgICAgICAgICAgIHJldHVybiB2MS5sZW5ndGgoKSA8IHYyLmxlbmd0aCgpID8gLTEgOiAxOwogICAgICAgIAogICAgICAgIC8vIEJvdGggZW1wdHk/CiAgICAgICAgaWYgKHYxLmlzRW1wdHkoKSkKICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgCiAgICAgICAgLy8gRmlyc3QgZGlnaXQgZGlmZmVycz8KICAgICAgICBpZiAodjEuY2hhckF0KDApICE9IHYyLmNoYXJBdCgwKSkKICAgICAgICAgICAgcmV0dXJuIHYxLmNoYXJBdCgwKSA8IHYyLmNoYXJBdCgwKSA/IC0xIDogMTsKICAgICAgICAKICAgICAgICAvLyBSZWN1cnNlIG9uIHJlc3Qgb2YgbnVtYmVyCiAgICAgICAgcmV0dXJuIGNvbXBhcmVQb3NpdGl2ZXModjEuc3Vic3RyaW5nKDEpLCB2Mi5zdWJzdHJpbmcoMSkpOwogICAgfQogICAgCiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgU3RyaW5nW10gdGVzdENhc2VzID0gewogICAgICAgICAgICAgICAgIi00NjgxMjgyMTgxMjM5OTIxODIxODIzODE1ODI5IiwKICAgICAgICAgICAgICAgICItOTIyMzM3MjAzNjg1NDc3NTgwOSIsIC8vIE1JTl9WQUxVRS0xCiAgICAgICAgICAgICAgICAiIiArIExvbmcuTUlOX1ZBTFVFLAogICAgICAgICAgICAgICAgIi0xMjM0NTYiLAogICAgICAgICAgICAgICAgIi01NTU1NSIsCiAgICAgICAgICAgICAgICAiLTEiLAogICAgICAgICAgICAgICAgIjAiLAogICAgICAgICAgICAgICAgIjEiLAogICAgICAgICAgICAgICAgIjU1NTU1IiwKICAgICAgICAgICAgICAgICIxMjM0NTYiLAogICAgICAgICAgICAgICAgIiIgKyBMb25nLk1BWF9WQUxVRSwKICAgICAgICAgICAgICAgICI5MjIzMzcyMDM2ODU0Nzc1ODA4IiwgLy8gTUFYX1ZBTFVFKzEKICAgICAgICAgICAgICAgICItNDY4MTI4MjE4MTIzOTkyMTgyMTgyMzgxNTgyOSIKICAgICAgICB9OwogICAgICAgIAogICAgICAgIGZvciAoU3RyaW5nIHRlc3RWYWwxIDogdGVzdENhc2VzKSB7CiAgICAgICAgICAgIGZvciAoU3RyaW5nIHRlc3RWYWwyIDogdGVzdENhc2VzKSB7CiAgICAgICAgICAgICAgICBpbnQgZXhwZWN0ZWQgPSBuZXcgQmlnSW50ZWdlcih0ZXN0VmFsMSkuY29tcGFyZVRvKG5ldyBCaWdJbnRlZ2VyKHRlc3RWYWwyKSk7CiAgICAgICAgICAgICAgICBpbnQgYWN0dWFsID0gY29tcGFyZSh0ZXN0VmFsMSwgdGVzdFZhbDIpOwogICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGYoIiUzMHMgICUzMHMgICVkICAlZCVuIiwgdGVzdFZhbDEsIHRlc3RWYWwyLCBleHBlY3RlZCwgYWN0dWFsKTsKICAgICAgICAgICAgICAgIGlmIChleHBlY3RlZCAhPSBhY3R1YWwpIHsKICAgICAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIiAgICBmYWlsIik7CiAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGYoIiUzMHMlbiIsIHRlc3RWYWwxKTsKICAgICAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50ZigiJTMwcyVuIiwgdGVzdFZhbDIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9CgkK