链接:

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 = ;
while(x)
{
i++;
if(i%)
j += x%;
else
o += x%;
x /= ;
}
return j+o;
} int main()
{
int n, t, k=, flag=;
while(scanf("%d%d", &n, &t)!=EOF)
{
if(n==- && t==-)
break; flag = J = O = ; int a = Slove(n), b = a; if(i%) swap(J, O);
J += j, O += o; while(t--)
{
a += Slove(b);
b = a; if(i%) swap(J, O);
J += j, O += o;
} if(J<O) swap(J, O);
if((J-O)%==) flag = ; if(flag==)
printf("Case #%d: Yes\n", k++);
else
printf("Case #%d: No\n", k++);
}
return ;
}
05-11 15:41