http://acm.hdu.edu.cn/showproblem.php?pid=5373
这道题并不难,你要做的就是把一开始n的每位的权值加起来,然后不断去维护这个权值。
可以预料的是,由于n为1e4,t为1e5,重复计算的时候权值并不会超出int范围,毕竟你每个权值加起来想达到21亿,假设全部位数权值都是9,那也要2亿位了。
代码如下:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n, t, tmp, ans, cnt, temp;
int cas = 1;
while(scanf("%d%d", &n, &t) != EOF)
{
if(n == -1 && t == -1)
break;
tmp = n;
ans = 0;
while(tmp)
{
ans += tmp % 10;
tmp /= 10;
}
n %= 11;
while(t--)
{
temp = ans;
tmp = ans;
cnt = 0;
while(tmp)
{
ans += tmp % 10;
tmp /= 10;
cnt++;
}
// cout << ans << endl;
while(cnt--)
n *= 10;
n += temp;
n %= 11;
}
printf("Case #%d: ", cas++);
if(n % 11 == 0)
printf("Yes\n");
else
printf("No\n");
}
return 0;
}