📏
下X桁が同じかどうかを判定するのに、余りを活用する
2つの整数の下X桁を比較するのに、余りが使えるということを知ったので、まとめてみた。
想定されるケース
- 与えられるのは: 整数 n, a, b
- 知りたいのは: a と b の下n桁が同じかどうか
例
// e.g.1
Input: 4, 1452345, 1234853
Output: false
// e.g.2
Input: 3, 12345, 34345
Output: true
方針1: 余りを活用する
例えば、e.g.2のように知りたいのが下3桁の場合、1000で割った余りが同じであればよい。
このからくりは、a, bの2つの整数を分解してみれば一目瞭然。
12345 = 12 x 1000 + 345
34345 = 34 x 1000 + 345
このように、異なるのは1000を何回かけるかのみ。最後に足す数(=下3桁)は両方とも同じ。この仕組を使ったコードは、以下のようになる。
public static void main(String[] args) {
System.out.println(isSameLastDigit(3, 12345, 23345)); // true
System.out.println(isSameLastDigit(6, 12312345, 12323355)); // false
}
static boolean isSameLastDigit(int digit, int a, int b){
boolean result = false;
double divisor = Math.pow(10, digit);
if(a%divisor == b%divisor)
result = true;
return result;
}
方針2: 文字列に変換して調べる~無知だった私による~
この余りの方法を知らない私が、最初に書いたコードも公開しておく。これでもできるが、文字列に変換して、一部を切り取り、比較するという工程を踏んでいるため、無駄な処理時間がかかっているのだと思う。
public static void main(String[] args) {
System.out.println(isSameLastDigit(3, 12345, 23345)); // true
System.out.println(isSameLastDigit(6, 12312345, 12323355)); // false
}
static boolean isSameLastDigit(int digit, int target, int num){
boolean result = false;
String targetStr = String.valueOf(target);
String numStr = String.valueOf(num);
String targetStrPart = targetStr.substring(digit);
String numStrPart = numStr.substring(digit);
if(targetStrPart.equals(numStrPart)){
result = true;
}
return result;
}
Discussion