51Nod ~ 1770 ~ 数数字 (模拟 + 找循环节)

思路:可以发现一定会出现循环节。模拟乘法过程,如果出现了循环节就结束,但是注意如果最后一位还要进位的话,要判断答案是否还要+1。

#include <bits/stdc++.h>
using namespace std;
int a, b, d, n;
int main()
{
    int T;scanf("%d", &T);
    while (T--)
    {
        scanf("%d%d%d%d", &a, &b, &d, &n);
        int ans = 0, pre = -1, g = 0;
        for (int i = 0; i < n; i++)
        {
            int temp = a*b + g;
            g = temp / 10;
            int x = temp % 10;
            if (temp == pre)
            {
                if (x == d) ans += n-i;
                break;
            }
            pre = temp;
            if (x == d) ans++;
        }
        if (g != 0 && g == d) ans++;
        printf("%d\n", ans);
    }
    return 0;
}
/*
2
3 3 9 10
3 3 0 10
*/

猜你喜欢

转载自blog.csdn.net/ZscDst/article/details/79944705