题目链接: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;
}