In this problem, we should solve an interesting game. At first, we have an integer n, then we begin to make some funny change. We sum up every digit of the n, then insert it to the tail of the number n, then let the new number be the interesting number n. repeat it for t times. When n=123 and t=3 then we can get 123->1236->123612->12361215.
InputMultiple input.
We have two integer n (0<=n<= 104104 ) , t(0<=t<= 105105) in each row.
When n==-1 and t==-1 mean the end of input.
OutputFor each input , if the final number are divisible by 11, output “Yes”, else output ”No”. without quote.Sample Input
35 2 35 1 -1 -1Sample Output
Case #1: Yes
Case #2: No
这题如果我们直接用大数除法的话是肯定超时的,所以我们要在对字符串进行操作的时候就把它与11的余数算出来
#include <bits/stdc++.h>
using namespace std;
const int inf = 1e6 + 10;
int main()
{
int n, t;
int N = 0;
while(scanf("%d %d", &n, &t) != EOF && (t != -1 || n != -1)){
N ++;
int he = 0;
int yu = n % 11;
while(n){
he += n % 10;
n /= 10;
}
int he2 = 0, he3 = 0;
int wei;
for(int i = 0; i < t; i ++){
wei = 1;
he3 = he;
he2 = he;
while(he2){
wei *= 10;
he += he2 % 10;//he是下次要添加的数
he2 /= 10;
}
yu = yu * wei + he3;//这里别用yu * pow(10,he2的位数),因为pow返回的类型是double,很可能会出错
yu %= 11;
}
if(yu) printf("Case #%d: No\n", N);
else printf("Case #%d: Yes\n", N);
}
return 0;
}