【题目描述】
假设今天是星期日,那么过ab天之后是星期几?
【输入】
两个正整数a,b,中间用单个空格隔开。0<a≤100,0<b≤10000。
【输出】
一个字符串,代表过ab天之后是星期几。
其中,Monday是星期一,Tuesday是星期二,Wednesday是星期三,Thursday是星期四,Friday是星期五,Saturday是星期六,Sunday是星期日。
1.回刷前面没做的题的时候做到的。这是一个非常水的题嘛,直接开搞,暴力一点。
#include<iostream> #include<cstdio> #include<cmath> using namespace std; int main() { int a,b; cin>>a>>b; int x=pow(a,b); int y=x/7; int z=x-7*y; if(z==1) cout<<"Monday"; if(z==2) cout<<"Tuesday"; if(z==3) cout<<"Wednesday"; if(z==4) cout<<"Thursday"; if(z==5) cout<<"Friday"; if(z==6) cout<<"Saturay"; if(z==0) cout<<"Sunday"; return 0; }
好水真的好水...一点意思都没有
2.然后我就交了.......
蛤?!
为嘛只得了十分?
3.带进给的3和2000,果然不行,可能爆int了,让我看看怎么搞。
既然到最后再算余数不行,
那就每乘上一个a的时候都把余数算出来,循环b次,这样应该就能保证不爆int了。
话不多说,打代码
for(int i=1;i<=b;i++) { z*=a; z%=7; }
做一个这样的循环,到最后输出的结果就能不爆int了。
让我们带进去交一遍,
这次果然好了。
4.总结总结
这种题一定一定要看一看会不会超值,
可能先算出总数再进行其他运算的时候,
这个总数已经爆掉了;
当比较大的数不能成功运行的时候,
就要优化自己的程序,
比较正常的就是从程序里面开始算,用循环做,
(就跟上面这个一样)
所以做题的时候还是要长点心啊!