题目是很好理解的,我们可以想象为小时候常玩的丢手绢,只是将规则改成题目要求就可以了。
也就是说我们要从起点x出发,不断前进到需前进的步数即可,但由于k的取值范围是(0,10^9 ),那么10^k很明显就会爆,所以需要在使用快速幂的同时对n取余。
所以得到代码如下:
#include <iostream>
using namespace std ;
int n, m , k , x ;
int km (int a , int b ) {
int ans = 1 ;
while(b){
if (b&1) ans=ans*a%n;
a=a*a%n;
b>>=1;
}
}
int main () {
cin >> n >> m >> k >> x ;
cout << (x+m%n*km(10,k)%n)%n;
}