今天creeper要向大家分享一个特殊的数学题目:
这种类型的题目呢,妥妥的编程做简单,之前creeper做这种题目时常这样想......
而今天,我终于把它给做出来了!
根据题意声明并输入三个变量n,m,p~~
#include <bits/stdc++.h>
using namespace std;
int main(){
int n,m,p;
cin >> n >> m >> p;
return 0;
}
然后就是重复m次的运算,每次都输入一个新的运算符和k:
#include <bits/stdc++.h>
using namespace std;
int main(){
char op //注意这里要声明一个代表符号的变量op哦!
int n,m,p , k ;// 这里也四!!
cin >> n >> m >> p;
for(int i = 0;i < m;i++){
cin >> op >> k;
}
return 0;
}
接着,进行三种情况的判断:
#include <bits/stdc++.h>
using namespace std;
int main(){
char op //注意这里要声明一个代表符号的变量op哦!
int n,m,p , k ;// 这里也四!!
cin >> n >> m >> p;
for(int i = 0;i < m;i++){
cin >> op >> k;
if(op == '+'){ }
else if(op == '-'){ }
else { }
}
return 0;
}
然后,在各个if语句框里写上运算:
#include <bits/stdc++.h>
using namespace std;
int main(){
char op //注意这里要声明一个代表符号的变量op哦!
int n,m,p , k ;// 这里也四!!
cin >> n >> m >> p;
for(int i = 0;i < m;i++){
cin >> op >> k;
if(op == '+'){n = (n%p + k%p)%p;}
else if(op == '-'){n = (n%p - k%p + p)%p;}
else {n = (n%p * k%p)%p;}
}
return 0;
}
注意了注意了!这里creeper并没有直接计算(m + / - / * k)%p,而是使用了取模运算的一个公式:
这个公式是为了防止括号里的结果太庞大,我们的C++编程系统 int 无法承受而导致数据溢出,这样得出的结果自然就是错的了。但如果我们在括号运算之前将括号内结果变小而不影响最终结果,这种风险将大大降低,所以就用到了上述公式;
最后输出:
#include <bits/stdc++.h>
using namespace std;
int main(){
char op //注意这里要声明一个代表符号的变量op哦!
int n,m,p , k ;// 这里也四!!
cin >> n >> m >> p;
for(int i = 0;i < m;i++){
cin >> op >> k;
if(op == '+'){n = (n%p + k%p)%p;}
else if(op == '-'){n = (n%p - k%p + p)%p;}
else {n = (n%p * k%p)%p;}
}
cout << n;
return 0;
}
酱紫这道题目成了,还可以用这种算法解决很多同类型题目
(但creeper劝告大家做作业时还是应该踏踏实实得算,毕竟考试时可不能编程!!!)