大家好,我是练习编程时长两年半的个人练习生昆工第一ikun,昨天因为在写Thoughtworkers的2018年笔试题,所以没有更新,今天就先把笔试题中的一个函数分享出来,该函数可以用于输入年月日求出该天是星期几。
我们知道1900年1月1日是周一,所以我们计算出输入的那天距离1900年1月1日的天数,我们就可以用算法求出该天是星期几。
weekday = ((days-1)%7+1)%7;
先计算出今年是从1900 1 1开始的第几天days,比如1900 1 2, days==2;然后days%7是除去了很多个星期后距离周一(1900 1 1为周一)的距离,days%7+1,后面这个1是周一的意思;然后再%7,这是通解。
#include <stdio.h>
int week(int y, int m, int d);
int main(int argc, char *argv[])
{
int weekday;
weekday = week(2022, 8, 12);
printf("该天是星期%d\n", weekday);
return 0;
}
int week(int y, int m, int d)
{
int i = 0, days, ms, sumyd = 0, summd = 0, x, day;
for(i = 1900; i < y; i++)
{
if(i%4 == 0 && i%100 != 0 || i%400 == 0) //判断平闰年
{
day = 366;
}
else
{
day = 365;
}
sumyd += day; //得出输入的年份距1900年的天数
}
if(y%4 == 0 && y%100 != 0 || y%400 == 0)
{
x = 29;
}
else
{
x = 28;
}
while(m)
{
switch(m)
{
case 1:
ms = 31;
break;
case 3:
ms = 31;
break;
case 4:
ms = 30;
break;
case 5:
ms = 31;
break;
case 6:
ms = 30;
break;
case 7:
ms = 31;
break;
case 8:
ms = 31;
break;
case 9:
ms = 30;
break;
case 10:
ms = 31;
break;
case 11:
ms = 30;
break;
case 12:
ms = 31;
break;
}
summd += ms;
m--;
}
summd += x; //得出输入该天距离1月1日的天数
days = summd + sumyd + d; //相加得出该天距离1900-1-1的天数
return (days%7+1)%7; //计算返回该天是星期几
}
我们输入今天的日期2022-8-12,可以得出今天是星期五
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)