NYOJ1086

是否被整除

时间限制: 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");
			}

		}

	}

}
        


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值