某公司的一道机试题: 计算任一天是星期几

已知1998年的1月1日是星期4,写一个函数,输入参数为年月日,返回值范围1~7,代表该天是星期几。

建一个VS2010 cpp console工程,验证结果正确,附核心代码如下:


const int MonthDay[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};


int testrunnian(int iyear)// 检测闰年
{
if(iyear%400 == 0|| (iyear%4 == 0 && iyear%100 != 0))
return 1;
else 
return 0;
}


int thisyear_1_1(int iyear)//计算这一年的1月1日是周几
// 19980101是周四
{
int ndays;
int nRunnian=0;
if(iyear > 1998)
{
for(int i=1998;i<iyear;i++)
nRunnian+=testrunnian(i);
ndays = 365*(iyear - 1998)+nRunnian;
return (4+ndays)%7;
}
else if(iyear < 1998)
{
for(int i=iyear; i<1998;i++)
nRunnian+=testrunnian(i);
ndays = (4-365*(1998-iyear)-nRunnian)%7;
if(ndays<0)
ndays+=7;
return ndays;


}
else return 4;
}


int weekday(int iyear, int imonth, int iday)
//计算星期
{
int base = thisyear_1_1(iyear);// 基准
int ndays =0;


for(int i=1;i<imonth;i++)
{
ndays+=MonthDay[i];
}
if(imonth>2)
ndays+=testrunnian(iyear);
ndays+=iday;


return (base+(ndays-1)%7)%7==0 ? 7:(base+(ndays-1)%7)%7;


}




int main(void)
{
printf("%d\n",weekday(2012,9,25));
printf("%d\n",weekday(1901,3,1));
printf("%d\n",weekday(2049,12,31));
while(1);
return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值