题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5373

题意:把一个数的数位之和加到这个数的后面,构成新数,继续这样操作,操作m轮,问最后这个数可以整除11吗?

解法:能被11整除的数的特征 把一个数由右边向左边数,将奇位上的数字与偶位上的数字分别加起来,再求它们的差,如果这个差是11的倍数(包括0),那么,原来这个数就一定能被11整除。代码直接统计奇偶的和,最后作差比较下。


#include <bits/stdc++.h>
using namespace std;
int n,t,x,y,m,a,b,c,d,e,p,q,k,ks=0;

int main()
{
    while(~scanf("%d %d", &n,&t))
    {
        if(n==-1&&t==-1) break;
        a=n/10000;
        b=(n/1000)%10;
        c=(n/100)%10;
        d=(n/10)%10;
        e=n%10;
        y=b+d;
        x=a+c+e;
        while(t--){
            k=0;
            p=0,q=0,m=x+y;
            while(m){
                k++;
                if(k%2)p+=m%10;
                else q+=m%10;
                m/=10;
            }
            if(k%2){
                x+=q;
                y+=p;
                swap(x,y);
            }
            else{
                x+=p,y+=q;
            }
        }
        if((x-y)%11)
            printf("Case #%d: No\n", ++ks);
        else
            printf("Case #%d: Yes\n", ++ks);
    }
    return 0;
}