当前位置:   article > 正文

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

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

目录

一,问题

二,思路 

三,代码 


一,问题

二,思路 

  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的数字?加上没法确定让数字持续不断变小的次数,因此,我就选择了死循环。

三,代码 

  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. int a,b,sz=1;
  6. cin>>a>>b;
  7. for(int i=0; i<b; i++)
  8. {
  9. sz*=a;
  10. while(sz>7)
  11. {
  12. sz-=7;
  13. }
  14. }
  15. if(sz==1) cout<<"Monday";
  16. else if(sz==2) cout<<"Tuesday";
  17. else if(sz==3) cout<<"Wednesday";
  18. else if(sz==4) cout<<"Thursday";
  19. else if(sz==5) cout<<"Friday";
  20. else if(sz==6) cout<<"Saturday";
  21. else if(sz==7) cout<<"Sunday";
  22. return 0;
  23. }

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

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号