C++用已知星期几推算其他星期几

作者在 2020-03-08 18:54:50 发布以下内容

//缘由https://bbs.bccn.net/viewthread.php?tid=498781&page=1#pid2717311

今得闲,就来分析一下,用你的已知推算,推算不用想得很远令人畏难,只在7天之内推算,比如已知2019-10-1为周二,那么,往后推7天即2019-10-8,2个日期相差7天,用7求余为0,这天还是周二,因此要在求余加上已知周几即得正确答案,那比如往后推4天即2019-10-5,2个日期差4用7求余为4再加已知2即得周六也正确,那往后推6天怎样?用7求余为6再加2=8再用7求余为1即得周一才正确,综上所述,即日期往后推应加上已知周二这样一次求余即得正确答案;
那么,往前推日期又是虾米情况?还用上面的3个典型天数推,7天还是周二?随意打开日历算一下就知道应该是周二才对,怎么知道的?先不用跨月算,先用日历上的19和12算7天的就对了,那么,跨月如何算?那就要用到我的函数了即求9月天数再加10月1日的一天得从9月1日起到10月1日的总天数再减去9月的天数即得2个日期差值即往前7天为9月24日,2019-9月为30天再加1天即到国庆总天数为31天-24天=7天,7+2再求余7即得周二。那么,往前4天?怎么算?如前先求出到国庆总天数减去4天可得31-4=27即9月27日,日期计算正确了,差值为4还加2?加2等于6求余为周六,查日历为周五,减去2?减去2等于2求余为周二也不对,怎么算?7+2-4=5,那么,往前6天?差值6,7+2-6=3。对?其中道理自己去悟。从此近推远就通顺了,还用我这函数来做验证:

    int n = 2019, y = 10, r = 1, n1 = 2017, y1 = 10, r1 = 1, z = 2;
    while (n>=n1)if (--y)r += 计算月的天数(n, y); else --n, y = 13;
    n = n1;
    while (n1 >= n)if (--y1)r1 += 计算月的天数(n1, y1); else --n1, y1 = 13;
    cout << r - r1 << "天数差 国庆星期" << ((7 + z) - ((r - r1) % 7)) % 7 << endl;
之上程序往前推算,分别用2018到2014计算都得正确答案,可自己去试一试。
当然了,你也可以用7-4+2或7-6+2的算式同样得到正确答案。

默认分类 | 阅读 1818 次
文章评论,共0条
游客请输入验证码