c++习题08-计算星期几

发布于:2024-07-03 ⋅ 阅读:(18) ⋅ 点赞:(0)

目录

一,问题

二,思路 

三,代码 


一,问题

二,思路 

  1. 首先,需要注意到的是3^2000这个数值很大,已经远远超过了long long 数据类型能够表示的范围,如果想要使用指定的数据类型来保存这个数据值,就需要使用大数库:如 GMP(GNU Multiple Precision Arithmetic Library)或 C++ 的 Boost.Multiprecision 库,这些库可以处理任意精度的整数。但是这种方法比较麻烦,需要自己去下载安装及运行编译boost库。这道题也可以不使用大数库。
  2. 如果我不使用大数库,那么我可以先尝试将每一次得到的数值,去重复循环减去7(死循环结束的条件是数值小于7,如果数值不是大于7,那么在循环体里面重复减去7的时候会出现负数,不符合题目要求)。【为什么要减去七?是因为每一周的间隔都是7天一直减去7直到数值在0~7的范围,将复杂的问题简单化】
  3. 通过死循环,将数值变小,通过验证,得到我想要的数值,之后就可以把数值拿来作为判断的条件,如果数值等于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;
}

 有问题请在评论区留言或者是私信我,回复时间不超过一天。