#include <stdio.h>
#include <stdlib.h>
/* http://a...content-available-to-author-only...y.mil/data/docs/JulianDate.php */
/* http://c...content-available-to-author-only...a.com/wiki/Julian_day_number */
double jd( int m, int d, int y ) {
y += 8000 ;
if ( m < 3 ) { y--; m += 12 ; }
return y* 365.0 + ( y/ 4 ) - ( y/ 100 ) + ( y/ 400 ) + ( m* 153 + 3 ) / 5 + d - 1200913.5 ;
}
double mjd( int m, int d, int y ) { return jd( m, d, y ) - 2400000.5 ; }
int leap( int year ) {
return year % 4 == 0 && ( year % 100 != 0 || year % 400 == 0 ) ;
}
int invalid( int month, int day, int year ) {
static const int days[ ] = { 31 , 28 , 31 , 30 , 31 , 30 , 31 , 31 , 30 , 31 , 30 , 31 } ;
if ( month < 1 || month > 12 || day < 1 ) return 1 ;
if ( ( month != 2 || ! leap( year ) ) && day > days[ month- 1 ] ) return 1 ;
return day > 29 ;
}
int main( void ) {
int d1, m1, y1, d2, m2, y2;
char temp, buf[ 200 ] ;
for ( ; ; ) {
for ( ; ; ) {
printf ( "\n Enter first date in 'mm/dd/yyyy' format: " ) ; fgets ( buf
, sizeof ( buf
) , stdin
) ; if ( sscanf ( buf
, "%d%c%d%c%d" , & m1
, & temp
, & d1
, & temp
, & y1
) != 5 ) exit ( 0 ) ; if ( ! invalid( m1, d1, y1 ) ) break ;
printf ( "Invalid input!!!\n " ) ; }
for ( ; ; ) {
printf ( "\n Enter second date in 'mm/dd/yyyy' format: " ) ; fgets ( buf
, sizeof ( buf
) , stdin
) ; if ( sscanf ( buf
, "%d%c%d%c%d" , & m2
, & temp
, & d2
, & temp
, & y2
) != 5 ) exit ( 0 ) ; if ( ! invalid( m2, d2, y2 ) ) break ;
printf ( "Invalid input!!!\n " ) ; }
printf ( "\n %.0lf\n " , mjd
( m2
, d2
, y2
) - mjd
( m1
, d1
, y1
) ) ; }
return 0 ;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KLyogaHR0cDovL2EuLi5jb250ZW50LWF2YWlsYWJsZS10by1hdXRob3Itb25seS4uLnkubWlsL2RhdGEvZG9jcy9KdWxpYW5EYXRlLnBocCAqLwovKiBodHRwOi8vYy4uLmNvbnRlbnQtYXZhaWxhYmxlLXRvLWF1dGhvci1vbmx5Li4uYS5jb20vd2lraS9KdWxpYW5fZGF5X251bWJlciAqLwpkb3VibGUgamQoIGludCBtLCBpbnQgZCwgaW50IHkgKSB7Cgl5ICs9IDgwMDA7CglpZiAoIG0gPCAzICkgeyB5LS07IG0gKz0gMTI7IH0KCXJldHVybiB5KjM2NS4wICsgKHkvNCkgLSAoeS8xMDApICsgKHkvNDAwKSArIChtKjE1MyszKS81ICsgZCAtIDEyMDA5MTMuNTsKfQpkb3VibGUgbWpkKCBpbnQgbSwgaW50IGQsIGludCB5ICkgeyByZXR1cm4gamQoIG0sIGQsIHkgKSAtIDI0MDAwMDAuNTsgfQppbnQgbGVhcCggaW50IHllYXIgKSB7CiAgICByZXR1cm4geWVhciAlIDQgPT0gMCAmJiAoIHllYXIgJSAxMDAgIT0gMCB8fCB5ZWFyICUgNDAwID09IDAgKTsKfQppbnQgaW52YWxpZCggaW50IG1vbnRoLCBpbnQgZGF5LCBpbnQgeWVhciApIHsKICAgIHN0YXRpYyBjb25zdCBpbnQgZGF5c1tdPSB7IDMxLCAyOCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMSwgMzAsIDMxLCAzMCwgMzEgfTsKICAgIGlmICggbW9udGggPCAxIHx8IG1vbnRoID4gMTIgfHwgZGF5IDwgMSApIHJldHVybiAxOwogICAgaWYgKCAobW9udGggIT0gMiB8fCAhbGVhcCggeWVhciApKSAmJiBkYXkgPiBkYXlzW21vbnRoLTFdICkgcmV0dXJuIDE7CiAgICByZXR1cm4gZGF5ID4gMjk7Cn0KaW50IG1haW4oIHZvaWQgKSB7CiAgICBpbnQgZDEsIG0xLCB5MSwgZDIsIG0yLCB5MjsKICAgIGNoYXIgdGVtcCwgYnVmWzIwMF07CiAgICBmb3IgKCA7IDsgKSB7CiAgICAgICAgZm9yICggOyA7ICkgewogICAgICAgICAgICBwcmludGYoICJcbkVudGVyIGZpcnN0IGRhdGUgaW4gJ21tL2RkL3l5eXknIGZvcm1hdDogIiApOwogICAgICAgICAgICBmZ2V0cyggYnVmLCBzaXplb2YoIGJ1ZiApLCBzdGRpbiApOwogICAgICAgICAgICBpZiAoIHNzY2FuZiggYnVmLCAiJWQlYyVkJWMlZCIsICZtMSwgJnRlbXAsICZkMSwgJnRlbXAsICZ5MSApICE9IDUgKSBleGl0KCAwICk7CiAgICAgICAgICAgIGlmICggIWludmFsaWQoIG0xLCBkMSwgeTEgKSApIGJyZWFrOwogICAgICAgICAgICBwcmludGYoICJJbnZhbGlkIGlucHV0ISEhXG4iICk7CiAgICAgICAgfQogICAgICAgIGZvciAoIDsgOyApIHsKICAgICAgICAgICAgcHJpbnRmKCAiXG5FbnRlciBzZWNvbmQgZGF0ZSBpbiAnbW0vZGQveXl5eScgZm9ybWF0OiAiICk7CiAgICAgICAgICAgIGZnZXRzKCBidWYsIHNpemVvZiggYnVmICksIHN0ZGluICk7CiAgICAgICAgICAgIGlmICggc3NjYW5mKCBidWYsICIlZCVjJWQlYyVkIiwgJm0yLCAmdGVtcCwgJmQyLCAmdGVtcCwgJnkyICkgIT0gNSApIGV4aXQoIDAgKTsKICAgICAgICAgICAgaWYgKCAhaW52YWxpZCggbTIsIGQyLCB5MiApICkgYnJlYWs7CiAgICAgICAgICAgIHByaW50ZiggIkludmFsaWQgaW5wdXQhISFcbiIgKTsKICAgICAgICB9CiAgICAgICAgcHJpbnRmKCAiXG4lLjBsZlxuIiwgbWpkKCBtMiwgZDIsIHkyICkgLSBtamQoIG0xLCBkMSwgeTEgKSApOwogICAgfQogICAgcmV0dXJuIDA7Cn0K