入力年月日、出力この日付は今年の何日目ですか

12986 ワード

typedef struct Date
{
     
	int year;
	int month;
	int day;
}Date;

/* */
bool ISleapyear(int year)
{
     
	/* 4 100 400 */
	return year % 4 == 0 && year % 100 != 0 || year % 400 == 0;
}

/* */
int Totaldays(struct Date* da)
{
     
	int total = 0;// 
	int arr[12] = {
      31,28,31,30,31,30,31,31,30,31,30,31 };//arr 
	if (ISleapyear(da->year))// 
	{
     
		arr[1] =29;
	}
    // 
	for (int i = 0; i < da->month - 1; ++i)
	{
     
		total += arr[i];
	}
	total += da->day;// 
	return total;
}

int main()
{
     
	Date date;
	printf("Please input year、month and day:");
	scanf_s("%d%d%d", &date.year, &date.month, &date.day);
	printf("%d %d %d :%d
"
, date.year,date.month,date.day,Totaldays(&date)); return 0; }

2つ目は、合計日数を計算する方法です.
int Totaldays(const Date *da)
{
     
	int total=0;// 

	// month-1 
	switch (da->month)
	{
     
	case 1:total = 0; break;
	case 2:total = 31; break;
	case 3:total = 59; break;//2 28 
	case 4:total = 90; break;
	case 5:total = 120; break;
	case 6:total = 151; break;
	case 7:total = 181; break;
	case 8:total = 212; break;
	case 9:total = 243; break;
	case 10:total = 273; break;
	case 11:total = 304; break;
	case 12:total = 334; break;
	default:printf(" !"); break;
	}
	// , +1
	if (ISleapyear(da->year))
	{
     
		total += 1;
	}
	return total+da->day;
}