程序设计:数字游戏
科小维拿到了一个不超过p的非负整数n,他对这个数进行了m次操作,每一次操作可能是以下3种之一:
+k,表示对目前的数加上k,然后再对p取模
-k,表示对目前的数减去k,然后再对p取模,如果结果为负数,转换成同余的非负数
*k,表示对目前的数乘上k,然后再对p取模
输入格式
输入第一行,包含三个整数n,m,p(0<=n<p<=10^9,1<=m<=10^5)。
接下来$m$行,每行是一个运算符和一个整数k(1<=k<=10^9),表示这一次的操作,两者之间以一个空格分隔。
输出格式
输出一行,包含一个整数,表示最后的结果。
样例输入
3 2 5
+ 4
- 8
样例输出
4
首先,输入n, m, p,再用for循环输入一个字符表示一个运算符和一个正整数,代码如下:
int n, m, p;
cin >> n >> m >> p;
for(int i = 0; i < m; i++){
char a;
cin >> a;
int k;
cin >> k;
}
再在for循环中接着用if语句判断运算符为 +, -, *,做出相应的计算,代码如下:
if(a == '+'){
n = (n + k) % p;
}else if(a == '-'){
n = (n - k) % p;
if(n < 0){
n = n + p;
}
}else{
n = (n * k) % p;
}
切记!这里如果减完以后为负整数的话,就要在这个数的基础上再加上p,变为同余的正整数。
最后,输出最终答案
完整代码:
#include <bits/stdc++.h>
using namespace std;
int main() {
int n, m, p;
cin >> n >> m >> p;
for(int i = 0; i < m; i++){
char a;
cin >> a;
int k;
cin >> k;
if(a == '+'){
n = (n + k) % p;
}else if(a == '-'){
n = (n - k) % p;
if(n < 0){
n = n + p;
}
}else{
n = (n * k) % p;
}
}
cout << n << endl;
return 0;
}