判断一个数字是不是7的倍数,可以直接求余:
public class CheckDivisibilityBy7 {
boolean isDivisibleBy7(int n) {
return (n % 7 == 0) ? true : false;
}
}
当然也可以一直做减法,看看有没有机会为0:
public class CheckDivisibilityBy7 {
public static boolean isDivisibleBy7(int n) {
if (n > 0) {
while (n > 0) {
n -= 7;
if (n == 0)
return true;
}
} else if (n == 0) {
return true;
} else {
while (n < 0) {
n += 7;
if (n == 0)
return true;
}
}
return false;
}
public static void main(String[] args) {
System.out.println(isDivisibleBy7(91));
}
}
下面有一个比较有意思的办法,我们假设一个整数n,n可以表示为:
n=10a+b
于是b就是n的个位数字,a是十位(包括十位)以上的数字。等号两边乘以2,于是有:
2n=20a+2b
于是有:
2n=21a−a+2b
因为21a无论如何也能被7整除,那么起决定作用的部分只有 −a+2b 了。判断是不是7的倍数,跟正负号也没啥关系,所以我们也可以判断 a−2b 是不是7的倍数也行。
例如371: 37 – (2×1) = 37 – 2 = 35; 3 – (2 × 5) = 3 – 10 = -7,-7就是7的倍数了,所以371也是7的倍数。
public class CheckDivisibilityBy7 {
public static boolean isDivisibleBy7(int n) {
if (n < 0)
return isDivisibleBy7(-n);
if (n == 0 || n == 7)
return true;
if (n < 10)
return false;
return isDivisibleBy7(n / 10 - 2 * (n - n / 10 * 10));
}
public static void main(String[] args) {
System.out.println(isDivisibleBy7(91));
}
}
要是这么算时间复杂度也很小了,也就是整数位数的级别。