链接:

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\n", k++);
        else
            printf("Case #%d: No\n", k++);
    }
    return 0;
}

 

posted on 2015-08-11 14:49  栀蓝  阅读(712)  评论(0编辑  收藏  举报

levels of contents