給出年、月、日,計算該日是該年的第幾天,
//大多數情況下列出 每個月的默認天數(如果是閏年后面再修改)
//默認 1、3、5、7、8、10、12每月31天,二月閏年29天,平年28天,其余月份30天
/*
給出年、月、日,計算該日是該年的第幾天,
*/
#include <stdio.h>
#define n 8
//大多數情況下列出 每個月的默認天數(如果是閏年后面再修改)
//默認 1、3、5、7、8、10、12每月31天,二月閏年29天,平年28天,其余月份30天
int month[13] = {0,31,28,31,30,
31,30,31,31,
30,31,30,31
};
//判斷年份是否為閏年
int judgement_leap(int i)
{
if(i % 4 == 0 && i % 100 != 0 || i % 100 == 0 && i % 400 == 0)
{
return 1;
}
return 0;
}
//獲取其為該年的第幾天
void get_date(int a[])
{
int date = 0,year = 0,mon = 0,day = 0;
year = a[0] * 1000 + a[1] * 100 + a[2] * 10 + a[3];//年
mon = a[4] * 10 + a[5];//月
day = a[6] * 10 + a[7];//日
if(mon > 2)//如果月份大于2月,說明需要判斷該年是否為閏年(閏年和平年 2月份天數不一樣)
{
if(judgement_leap(year) == 1)//是閏年
{
month[2] = 29;//2月份天數變為29天.(陣列第一個下標沒有用,方便月份與下標統一)
}
else;//不是閏年 是平年,就保存默認28天
}
//該年第幾天(陣列從1開始,停止再mon前)
//加前幾個月天數
for(int i = 1;i <= mon - 1;i ++ )
{
date = date + month[i];
}
//加當前月份天數
date = date + day;
//列印
printf("是%d年的第%d天",year,date);
return;
}
int main()
{
//陣列構成 年 4位,月份2位,日 2位
int a[n] = {0};
for(int i = 0;i < n;i ++)
{
scanf("%d",a + i);
}
get_date(a);//獲取第幾天,并列印結果
return 0;
}

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/398618.html
標籤:其他
上一篇:藍橋杯練習:十六進制轉十進制
