您的代码有两个问题:
1. 鉴于$n$比较大,因此在计算$\text{temp}\times \text{temp}$的时候有可能超$\text{int}$,因此$\text{temp}$变量最好定义为$\text{long long}$。
2. 请注意运算优先级问题,`!`的运算优先级比`%`高,因此`if(!k % 2)`应为`if (!(k%2))`。另外其实您可以这么写:
```cpp
if (k%2)
return (temp * temp * 10) % n;
//else
return (temp * temp) % n;
```
附上$\text{AC}$代码:
```cpp
#include <iostream>
using namespace std;
long long n, m, k, x;
int ksm(int k){
if (k == 0){
return 1 % n;
}
if (k == 1){
return 10 % n;
}
long long temp = ksm(k / 2);
if (!(k % 2)){
return (temp * temp) % n;
}
if (k % 2){
return (temp * temp * 10) % n;
}
}
int main(void) {
cin >> n >> m >> k >> x;
cout << ((x + m * ksm(k)) % n);
return 0;
}
```
by Sweetlemon @ 2018-10-27 18:45:59
楼上正解
by 蕾姆酱QvQ @ 2018-10-27 18:49:18
@[5743377_2002](/space/show?uid=36701)
by Sweetlemon @ 2018-10-27 19:47:28
考古
by Happynewyear @ 2019-02-14 20:14:01
@[5743377_2002](/space/show?uid=36701)
by Happynewyear @ 2019-02-14 20:14:04
考古
by Happynewyear @ 2019-02-14 20:14:09
????@[Happynewyear](/space/show?uid=87746)
by 正式AFO @ 2019-02-27 15:16:33
考古是森么意思
by 正式AFO @ 2019-02-27 15:17:40
@[5743377_2002](/space/show?uid=36701) 就是很旧的帖子来看看的意思啊
by Happynewyear @ 2019-03-02 10:50:17
知道了,谢谢@[Happynewyear](/space/show?uid=87746)
by 正式AFO @ 2019-07-17 16:13:24