第幾天?
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 96054 Accepted Submission(s): 36129
日期轉換的題,要考慮閏年:
口訣:四年一閏;百年不閏;四百年再閏
利用switch語句自動累加的原理寫的:
#include<cstdio>
int main()
{
int year,mon,day,count=0;
while(scanf("%d/%d/%d",&year,&mon,&day)!=EOF)
{
switch (mon)
{
case 12:count+=30;
case 11:count+=31;
case 10:count+=30;
case 9:count+=31;
case 8:count+=31;
case 7:count+=30;
case 6:count+=31;
case 5:count+=30;
case 4:count+=31;
case 3:count+=28;
case 2:count+=31;
case 1:;
count+=day;
if(mon>2&&year%4==0&&year%100!=0||year%400==0)//此些情況天數加一
count++;
}
printf("%d\n",count);
count=0;
}
return 0;
}
日期轉換有時候是一些題目的基礎,可以寫成子函數直接備用:
判斷閏年的函數:一般考慮到400年就可以了
int isRunNian(int year){
int result;
if(year%400 == 0 ||(year%4==0 && year%100!=0))
{
result = 1;
} else{
result = 0;
}
return result;
}
日期換算天數的子函數(要調用上一個):
int DiJiTian(int year, int month, int day){
int result = 0;
for(int i = 1; i < month; i++){ //step1
if(i==1||i==3||i==5||i==7||i==8||i==10||i==12){
result += 31;
} else if (i == 4 || i ==6 || i == 9 || i==11){
result += 30;
} else if(i == 2){
if(isRunNian(year))){
result += 29;
} else {
result += 28;
}
}
}
result += day; //step2
return result;
}