1 solutions

  • 0
    @ 2025-11-5 16:30:43

    C++ :

    #include <cstdio>
    int main(void) {
    	int y0, m0, d0, y, m, d, s=0, i;
    	int md[12]={31,28,31,30,31,30,31,31,30,31,30,31};
    	scanf("%d%d%d%d%d%d", &y0, &m0, &d0, &y, &m, &d);
    	y0 += 19; //目标年份,第20个生日,只需要过19年
    	if(y%400==0 || y%4==0&&y%100>0) md[1] = 29;
    	for(s=-d, i=0; i<m-1; ++i) s -= md[i]; // 负数表示当年已过的天数
    	for(; y<y0; ++y) { //中间年份的天数
    		if(y%400==0 || y%4==0&&y%100>0) s += 366;
    		else s += 365;
    	}
    	if(y%400==0 || y%4==0&&y%100>0) md[1] = 29;
    	else  md[1] = 28;
    	for(i=0, s+=d0; i<m0-1; ++i) s += md[i]; // 加上目标年份的天数
    	printf("%d\n", s);
    	return 0;
    }
    

    Pascal :

    var y,m,d:longint;
        y0,m0,d0:longint;
        s,i,p,q:longint;
    
    function year(n:longint):longint;
    begin
      if (n mod 4=0) and (n mod 100<>0)or(n mod 400=0) then
        year:=366
      else
        year:=365;
    end;
    
    function month(n,nian:longint):longint;
    begin
      case n of
        1,3,5,7,8,10,12:month:=31;
        4,6,9,11:month:=30;
        2:begin if year(nian)=365 then month:=28
                else month:=29;
          end;
      end;
    end;
    
    begin
      readln(y,m,d);
      readln(y0,m0,d0);
      y:=y+19;
      for i:=1 to m-1 do
        p:=p+month(i,y);
      p:=p+d;
      for i:=1 to m0-1 do
        q:=q+month(i,y0);
      q:=q+d0;
      for i:=y0 to y-1 do
        s:=s+year(i);
      s:=s+p-q;
      writeln(s);
    end.
    
    
    • 1

    Information

    ID
    17815
    Time
    1000ms
    Memory
    128MiB
    Difficulty
    (None)
    Tags
    # Submissions
    0
    Accepted
    0
    Uploaded By