标签:style http io ar color os sp for on
1 110 2 1100 3 110
YES YES NO
思路:能被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整除. 这种方法叫"奇偶位差法".
#include<iostream>
#include<string.h>
#include<algorithm>
#include<stdio.h>
using namespace std;
int a[22]={1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536,131072,262144,524288,1048576};
int main()
{
int n;
char s[1000005];
char ss[1000005];
while(cin>>n>>s)
{
int l=strlen(s);
int k=0;
for(int i=l-n;i<l;i++)
{
ss[k++]=s[i];
}
long long num=0;
for(int i=0;i<k;i++)
{
num=num*10+(ss[i]-'0');
}
int sumj=0;
int sumo=0;
for(int i=0;i<l;i++)
{
if(i%2==0)
sumo+=s[i]-'0';
else
sumj+=s[i]-'0';
}
int sum=sumj-sumo;
if(sum%11==0&&num%a[n]==0)
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
}
/*
1
2
4
8
16
32
64
128
256
512
1024
2048
4096
8192
16384
32768
65536
131072
262144
524288
1048576*/
标签:style http io ar color os sp for on
原文地址:http://blog.csdn.net/u012349696/article/details/41827835