题目大意:给你一个k进制的数,原数的最后一个数时m,用原数乘上n,要求找到一个将原数的最后一个数放到第一个,其他的数向后移动一位的最短的原数是多少
解题思路:设s 为原来的数,公式为,s = n * (s % k ) + s / k,以样例为例,原数时xxxxx7 * 4 = 7xxxxx,先将4*7,得到28,余上K,这一位就是变换后的数,即8,这样就变成了xxxxxx7 * 4 = 7xxxxx8,因为第二个数的8就是元素的倒数第二位,所以原数变成了xxxxx87 * 4 = 7xxxxx8,然后用4乘上8,得到32,加上之前28进位的2,就变成了34,这样就变成了xxxxx87 * 4 = 7xxxx48,即xxxx487 * 4 = 7xxxx48,依次类推,找到刚好为m的数,即当s==m时退出
#include<cstdio>
#include<cstring>
int main() {
int k, n, m;
while(scanf("%d",&k) != EOF) {
scanf("%d%d",&m,&n);
int s = n * m;
int cnt = 1;
while(s != m) {
s = n * (s % k) + s / k;
cnt++;
}
printf("%d\n",cnt);
}
return 0;
}