/*
西元1年1月1日星期一,請輸入輸入一西元日期年月日,計算該日是由西元1年1月1日起的第幾天星期幾。
提示:西元年份
(a)逢4的倍數閏, 例如:西元1992、1996年等,為4的倍數,故為閏年。
(b)逢100的倍數不閏, 例如:西元1700、1800、1900年,為100的倍數,當年不閏年。
(c)逢400的倍數閏, 例如:西元1600、2000、2400年,為400的倍數,有閏年
(d)逢4000的倍數不閏, 例如:西元4000、8000年,不閏年。
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int year_(int y){ //輸入年 回傳1(閏年), 回傳0(非閏年)
if(y%4000 == 0) return 0;
else if(y%400 == 0) return 1;
else if(y%100 == 0) return 0;
else if(y%4 == 0) return 1;
else return 0;
}
long thday_(int yy,int mm,int dd){ //輸入:年月日 輸出:是由西元1年1月1日起的第幾天
long total=0;
int Y[2]={365,366}; // Y[0] 非閏年 365 Y[1] 閏年 366
int YD[2][12]={{31,28,31,30,31,30,31,31,30,31,30,31},{31,29,31,30,31,30,31,31,30,31,30,31}};
for(int i=1;i<yy;i++) total=total+Y[ year_(i)];
for(int i=0;i<(mm-1);i++) total=total+YD[year_(yy)][i];
total=total+dd;
return total;
}
int weekday(long total, char day[3]){
//輸入:是由西元1年1月1日起的第幾天 輸出:星期幾
if(total%7==0) strcpy(day,"日"); //printf("日");
else if(total%7==1) strcpy(day,"一"); //printf("一");
else if(total%7==2) strcpy(day,"二"); //printf("二");
else if(total%7==3) strcpy(day,"三"); //printf("三");
else if(total%7==4) strcpy(day,"四"); //printf("四");
else if(total%7==5) strcpy(day,"五"); //printf("五");
else if(total%7==6) strcpy(day,"六"); //printf("六");
}
int main(){
long total=0;
int yy,mm,dd;
char day[3];
printf("年:");scanf("%d",&yy);
printf("月:");scanf("%d",&mm);
printf("日:");scanf("%d",&dd);
total=thday_(yy,mm,dd);
weekday(total, day);
printf("%d年%d月%d日是第%d天,星期%sn",yy,mm,dd,total,day);
system("pause");
return 1;
}
留言列表