题目:
科小维拿到了一个不超过p的非负整数n,他对这个数进行了m次操作,每一次操作可能是以下3种之—:
+ k,表示对目前的数加上k 然后再对p取模
- k,表示对目前的数减去k然后再对p 取模,如果结果为负数,转换成同余的非负数
* k ,表示对目前的数乘上k然后再对p取模
输入格式
输入第一行,包含三个整数n , m , p(O≤n<p≤10^9,1≤m≤10 ^5)。接下来 m 行,每行是一个运算符和一个正整数k(1<k≤10^9),表示这—次的操作,两者之间以—个空格分隔。
输出格式
输出—行,包含一个整数,表示最后的结果。
样例输入
3 2 5
+ 4
- 8
样例输出
4
首先,打好框架:
#include <iostream>
using namespace std;
int main(){
return 0;
}
输入n,m,p三个数字
int n,m,p;
cin >> n >> m >> p;
因为会执行m次操作,所以使用for循环,次数为m次
for(int i = 0;i < m;i++){
}
执行的内容分为两部分:符号和数字
所以设置两个变量,分别存符号和数字,然后输入
char c;
int s;
cin >> c >> s;
对输入的符号进行识别,然后执行相应操作
if(c == '+'){
n += s;
}else if(c == '-'){
n -= s;
}else if(c == '*'){
n *= s;
}
然后待循环结束,因为 n 要对 p 取mod,却又不可为负数,所以进行转换
n = (n + p) % p;
假设 a ≡ b (mod x),那么 a + x ≡ b(mod x)
就是这个道理
在一切完成后,输出即可
cout << n << endl;
endl 为换行,可加可不加,题目没有要求,按照个人习惯来即可
总体代码
#include <iostream>
using namespace std;
int main(){
int n,m,p;
cin >> n >> m >> p;
for(int i = 0;i < m;i++){
char c;
int s;
cin >> c >> s;
if(c == '+'){
n += s;
}else if(c == '-'){
n -= s;
}else if(c == '*'){
n *= s;
}
}
n = (n + p) % p;
cout << n << endl;
return 0;
}