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;
}
本文介绍了一个有趣的游戏问题:从一个初始整数出发,通过特定步骤重复运算,最终判断结果是否能被11整除。文章提供了C++实现代码,重点在于如何在字符串操作过程中高效计算与11的余数。
1568

被折叠的 条评论
为什么被折叠?



