E - The shortest problem

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值