目录
一,问题
二,思路
三,代码
一,问题
二,思路
- 首先,需要注意到的是3^2000这个数值很大,已经远远超过了long long 数据类型能够表示的范围,如果想要使用指定的数据类型来保存这个数据值,就需要使用大数库:如 GMP(GNU Multiple Precision Arithmetic Library)或 C++ 的 Boost.Multiprecision 库,这些库可以处理任意精度的整数。但是这种方法比较麻烦,需要自己去下载安装及运行编译boost库。这道题也可以不使用大数库。
- 如果我不使用大数库,那么我可以先尝试将每一次得到的数值,去重复循环减去7(死循环结束的条件是数值小于7,如果数值不是大于7,那么在循环体里面重复减去7的时候会出现负数,不符合题目要求)。【为什么要减去七?是因为每一周的间隔都是7天一直减去7直到数值在0~7的范围,将复杂的问题简单化】
- 通过死循环,将数值变小,通过验证,得到我想要的数值,之后就可以把数值拿来作为判断的条件,如果数值等于1,就输出"Monday"...
在上面思路的第二步中,为什么我要那么操作?主要是我自己先在草稿纸上将前三周的天数和周号都写下来,之后发现,既然每周的间隔都是7天,那么我就可以以数字7作为媒介,去寻找规律,并且,在第一周中,天数和周号是一样的,所以,我就想到,能不能找到一个办法,让极其大的数字,持续不断的变小,变成小于7的数字?加上没法确定让数字持续不断变小的次数,因此,我就选择了死循环。
三,代码
#include <iostream>
using namespace std;
int main()
{
int a,b,sz=1;
cin>>a>>b;
for(int i=0; i<b; i++)
{
sz*=a;
while(sz>7)
{
sz-=7;
}
}
if(sz==1) cout<<"Monday";
else if(sz==2) cout<<"Tuesday";
else if(sz==3) cout<<"Wednesday";
else if(sz==4) cout<<"Thursday";
else if(sz==5) cout<<"Friday";
else if(sz==6) cout<<"Saturday";
else if(sz==7) cout<<"Sunday";
return 0;
}
有问题请在评论区留言或者是私信我,回复时间不超过一天。