/*
    第2種情報処理技術者試験    平成6年度・秋期・午後 問7
                                BohYoh Shibata PREPARATION
*/

#include <stdio.h>

#define  leap(y)   ( y % 4 == 0 && y % 100 != 0 || y % 400 == 0 )
typedef struct{
    int year;
    int month;
    int day;
} Tdate;

long calcd(Tdate *);
int  check(Tdate *);

int table[24] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31,
                 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

main()
{
    long  total;
    Tdate today,birthday;

    printf("** 生年月日を入力してください **\n");
    scanf("%d %d %d",&birthday.year,&birthday.month,
              &birthday.day);
    printf("** 今日の日付を入力してください **\n");
    scanf("%d %d %d",&today.year,&today.month,&today.day);

    if ( check(&birthday) == 0 && check(&today) == 0 )
        if ((total = calcd(&today) - calcd(&birthday)) >= 0 )
            printf("   %d年%d月%d日から今日までの日数は\n"
                   "   %ld日です\n",
                    birthday.year,birthday.month,birthday.day,
                    total);
        else
            printf("** 生年月日が今日の日付より後になっています **\n");
    else
        printf ("** 入力した年月日が正しい範囲内にありません **\n"); 
}

/*  西暦1年1月1日からの日数を計算する  */
long  calcd(Tdate *dayp)
{
    int   i;
    int   offset;
    long  years = dayp->year - 1 ;
    long  days = dayp->day;

    days += years * 365;
    days += years / 4 - years / 100 + years / 400;
           /* 前年までのうるう年の数の合計を加える */
    
    if (leap(dayp->year))
        offset = 12;
    else
        offset = 0;
    for (i = 0;  i < dayp->month - 1 ; i++)
        days += table[i+offset] ;

    return  days;
}

/* 入力データの誤りを検出する */
int check(Tdate *dayp)
{
    int offset;
    int dlimit;

    if (leap(dayp->year))
        offset = 12;
    else
        offset = 0;
    dlimit = table[dayp->month + offset - 1];
    if (dayp->year < 1800 ||
        dayp->month < 1 || dayp->month > 12 ||
        dayp->day < 1 || dayp->day > dlimit)
        return 1;   /* 年月日が正しい範囲内にないとき1を返す */
    else
        return 0;   /* 年月日が正しい範囲内のとき0を返す */
}