链接:
http://acm.hdu.edu.cn/contests/contest_showproblem.php?pid=1005&cid=595
若一个整数的个位数字截去,再从余下的数中,减去个位数的2倍,如果差是7的倍数,则原数能被7整除。如果一次不容易看出,就需要继续上述过程。如6139,过程如下:613-9×2=595,59-5×2=49,所以6139是7的倍数。
能被11整除的数的特征
把一个数由右边向左边数,将奇位上的数字与偶位上的数字分别加起来,再求它们的差,如果这个差是11的倍数(包括0),那么,原来这个数就一定能被11整除.
能被3整除的数有什么特征??
各个数位上的数字之和是3的倍数
能被5整除的数有什么特征??
个位是0或5
能被9整除的数有什么特征??
各个数位上数字之和是9的倍数
被7整除:若一个整数的个位数字截去,再从余下的数中,减去个位数的2倍,如果差是7的倍数,则原数能被7整除。如果差太大或心算不易看出是否7的倍数,就需要继续上述「截尾、倍大、相减、验差」的过程,直到能清楚判断为止。例如,判断133是否7的倍数的过程如下:13-3×2=7,所以133是7的倍数;又例如判断6139是否7的倍数的过程如下:613-9×2=595 , 59-5×2=49,所以6139是7的倍数,余类推。
若一个整数的各个位数的数字和能被9整除,则这个整数能被9整除。如252=2+2+5=9
若一个整数的奇位数字之和与偶位数字之和的差能被11整除,则这个数能被11整除。11的倍数检验法也可用上述检查7的「割尾法」处理!过程唯一不同的是:倍数不是2而是1!
若一个整数的个位数字截去,再从余下的数中,加上个位数的4倍,如果差是13的倍数,则原数能被13整除。如果差太大或心算不易看出是否13的倍数,就需要继续上述「截尾、倍大、相加、验差」的过程,直到能清楚判断为止
代码:
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; #define N 1000005 #define INF 0x3f3f3f3f int J, O, j, o, i; int Slove(int x) { i = j = o = 0; while(x) { i++; if(i%2) j += x%10; else o += x%10; x /= 10; } return j+o; } int main() { int n, t, k=1, flag=0; while(scanf("%d%d", &n, &t)!=EOF) { if(n==-1 && t==-1) break; flag = J = O = 0; int a = Slove(n), b = a; if(i%2) swap(J, O); J += j, O += o; while(t--) { a += Slove(b); b = a; if(i%2) swap(J, O); J += j, O += o; } if(J<O) swap(J, O); if((J-O)%11==0) flag = 1; if(flag==1) printf("Case #%d: Yes ", k++); else printf("Case #%d: No ", k++); } return 0; }