是否被整除
时间限制:
1000 ms | 内存限制:
65535 KB
难度:
2
-
描述
-
一个位数不大于100万位的正整数,如果它既能被11整除又能被2的n次方整除就输出YES否则输出NO
-
输入
-
输入有多组数据每组数据有两行
第一行一个n代表2的n次方(0<n<18)
第二行一个整数
输出
- 输出只有一行每行一个YES或NO 样例输入
-
1 110 2 1100 3 110
样例输出
-
YES YES
NO
-
思路在代码中,代码如下:
-
import java.util.Scanner; /*能被2的N次方的数整除的数的特征 如果一个数末N位能被2的N次方的数整除,那么这个数就能被2的N次方的这个数整除。 如能被8(2的3次方)整除的数的特征:这个数字的末三位能被8整除。 能被11整除的数的特征 把一个数由右边向左边数,将奇位上的数字与偶位上的数字分别加起来,再求它们的差,如果这个差是11的倍数(包括0),那么,原来这个数就一定能被11除. 例如:判断491678能不能被11整除. —→奇位数字的和9+6+8=23 —→偶位数位的和4+1+7=12 23-12=11 因此,491678能被11整除. 这种方法叫"奇偶位差法". */ public class Main{ private static int array[] = new int[] { 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536, 131072, 262144, }; public static void main(String[] args) { Scanner cin = new Scanner(System.in); while (cin.hasNext()) { int n = cin.nextInt(); String number = cin.next(); int result = array[n]; int odd = 0; int even = 0; int size = number.length(); Long temp; if (size <= n) { temp = Long.parseLong(number); } else { temp = Long.parseLong(number.substring(size - n)); } for (int i = 0; i < number.length(); i++) { if (i % 2 == 0) { even += number.charAt(i) - '0'; } else { odd += number.charAt(i) - '0'; } } if (Math.abs(even - odd) % 11 == 0 && temp % result == 0) { System.out.println("YES"); } else { System.out.println("NO"); } } } }
-
输入有多组数据每组数据有两行