自己推了个公式,然后枚举实现,结果TLE
参考了人家代码,即使人家附了思路,还理解了半天。。惭愧。。。
“输入k,m,n,本来的数字为s,因为s的最后一位为m,则s*n的最后一位为s*n%k,而s*n%k又是s的倒数第二位,如许又可以策画出ans*n的倒数第二位”
#include <cstdio>
int main()
{
int k, m, n;
while(scanf("%d%d%d", &k, &m, &n) != EOF) {
int cnt = 1;
int s = m * n;
while(s != m) { // 如果s >= k 说明还能进位,必然不可能等于m. 注意下面的 s % k * n 不能是 s * n % k . 这个理解了好久。 因为所要计算的是倒数第二位!
s = s % k * n + s / k; // 这里的 s / k 就是进位, k进制, 这个可以自己算下,比如十进制值为 9 的四进制数 9 / 4 = 2 , 即进位+2 留下 9 % 4 = 1 即 21(base 4).
cnt ++;
}
printf("%d\n", cnt);
}
return 0;
}