close

/*
西元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;
}
 

arrow
arrow
    文章標籤
    萬年曆 資料結構
    全站熱搜
    創作者介紹
    創作者 tatar 的頭像
    tatar

    ppper 的部落格

    tatar 發表在 痞客邦 留言(0) 人氣()