题意:

题目等价于求分数 的小数点后第k1 到 k2位的所有数字

直接暴力模拟除法过程是肯定会 T 的,但是我们发现我们不用从头开始模拟,只需要从 第k1位开始模拟就可以了。

直接通过快速幂+取模算出第k1 位的数字。然后我们发现 ,所以暴力枚举除法过程就可以。

ans<<3 + ans<<1 == ans * 10

AC_code:

#include<bits/stdc++.h>
using namespace std;
int main() {
	int T;
	scanf("%d", &T);
	while(T--) {
		int m, n, k1, k2;
		scanf("%d%d%d%d", &m, &n, &k1, &k2);
		int a = 10, b = k1-1;
		long long ans = m;
		while(b) {
			if(b&1) ans = ans * a % n;
			a = (long long) a * a % n;
			b >>= 1;
		}
		for(int i = k1; i <= k2; i++) {
			ans = (ans<<3) + (ans<<1);
			int t = ans / n;
			ans = ans % n;
			putchar(t + '0');
		}
		putchar('\n');

	}
	return 0;
}