l草l原l狼l图l腾l吧 关注:5贴子:251
  • 2回复贴,共1

备份程序,学校的垃圾电脑真的懒得吐槽了。。。

只看楼主收藏回复

//星期几算法
//((求天数(所求年,基准年)+所求天-基准天)%7+8)%7
//基准天必须为星期一
#include <stdio.h>
#include <stdlib.h>
#define BYear 2018//基准年
#define BDays 1//基准天
#define bool char
#define true 1
#define false 0
//是否是闰年
bool isleap(int year);
//月份转换为天数
short monthtoday(char month,bool leap);
//两个年份之间相隔的天数
long yeartoday(int year,int baseyear);
int main(void)
{
int year;
short days;
char month;
while (true)//获取日期
{
puts("请按顺序输入年月日,用空白字符隔开");
if (scanf("%d%hd%hd",&year,&month,&days)!=3)
{
puts("输入不符合要求,任意键继续");
while (getchar()!='\n');
system("pause");
system("CLS");
continue;
}
while (getchar()!='\n');
break;
}
printf("这一天是%d年的第%lld天\n",year,days += monthtoday(month,isleap(year)));
fputs("这一天是星期",stdout);
switch (((yeartoday(year, BYear) + days - BDays) % 7 + 8) % 7)
{
case 1:puts("一");
break;
case 2:puts("二");
break;
case 3:puts("三");
break;
case 4:puts("四");
break;
case 5:puts("五");
break;
case 6:puts("六");
break;
case 7:puts("天");
break;
}
system("pause");
return 0;
}
bool isleap(int year)
{
if ((year % 100) == 0)//是否整百年
{
if (year / 100 % 4 == 0)
{
return true;
}
else
{
return false;
}
}
else
{
if (year % 4 == 0)
{
return true;
}
else
{
return false;
}
}
}
short monthtoday(char month,bool leap)
{
short days = 0;
char i;
for (i = 1;i < month;i++)
{
switch (i)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:days += 31;//有31天的月
break;
case 4:
case 6:
case 9:
case 11:days += 30;//有30天的月
break;
case 2:if (leap)//闰月
{
days += 29;
}
else
{
days += 28;
}
break;
}
}
return days;
}
long yeartoday(int year,int baseyear)
{
long days = 0;
days = (year - baseyear) * 365;//不含闰日的总天数
if (year > baseyear)
{
for (;baseyear < year; baseyear++)//加上闰年数
{
if (isleap(baseyear))
{
days++;
}
}
}
else if (year < baseyear)
{
for (;year < baseyear; year++)
{
if (isleap(year))
{
days--;//当所求年小于基准年时返回负数
}
}
}
return days;
}


IP属地:湖北1楼2017-03-02 16:31回复


    IP属地:广东2楼2017-10-26 18:16
    回复
      2025-05-23 06:09:15
      广告


      IP属地:广东来自Android客户端3楼2017-11-13 22:04
      回复