当前位置: 代码迷 >> 编程 >> 天勤OJ 标题1448: 日期累加
  详细解决方案

天勤OJ 标题1448: 日期累加

热度:5399   发布时间:2013-02-26 00:00:00.0
天勤OJ 题目1448: 日期累加

题目描述

设计一个程序能计算一个日期加上若干天后是什么日期。

 

输入

输入第一行表示样例个数m,接下来m行每行四个整数分别表示年月日和累加的天数。

 

输出

输出m行,每行按yyyy-mm-dd的个数输出。

 

样例输入
1
2008 2 3 100
 

样例输出
2008-05-13
 

提示 [+]

*** 提示已隐藏,点击上方 [+] 可显示 ***

 

来源

北京理工大学计算机专业2008年研究生复试上机试题

 


/**********************************   日期:2013-2-16*   作者:SJF0115*   题号: 天勤OJ 题目1448: 日期累加*   来源:http://acmclub.com/problem.php?id=1448*   结果:AC*   来源:北京理工大学计算机专业2008年研究生复试上机试题*   总结:**********************************/#include<stdio.h>#include<string.h>#include<stdlib.h>//判断闰年  int leap_year(int year){      if((year%100 != 0 && year%4 == 0) || (year % 400 == 0)){          return 1;      }      else{          return 0;      }  }  //闰年int Month[13]= {0,31,28,31,30,31,30,31,31,30,31,30,31};  int main(){    int n,i,j,year,month,day,days; 	//freopen("C:\\Users\\SJF\\Desktop\\acm.txt","r",stdin);       while(scanf("%d",&n) !=EOF){		for(i = 0;i < n;i++){			//输入每行四个整数分别表示年月日和累加的天数			scanf("%d %d %d %d",&year,&month,&day,&days);			//闰年2月29天			if(leap_year(year)){				Month[2] = 29;			}			else{				Month[2] = 28;			}			//从month月第一天开始计算			days = days + day;			for(j = month;j <= 13;j++){				//到了下一年				if(j == 13){					month = 1;					j = 1;					year ++;					if(leap_year(year)){						Month[2] = 29;					}					else{						Month[2] = 28;					}				}				//累加的天数不够这个月的				if(days > Month[j]){					days -= Month[j];				}				else{					month = j;					break;				}			}//for			//输出			printf("%d-%02d-%02d\n",year,month,days);		}    }      return 0;  }

转载

#include<stdio.h>#include<string.h>#include<stdlib.h>int f[13] = {0, 31, 0, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};bool check(int y) {    if (y % 100 == 0)        return y % 400 == 0;    else        return y % 4 == 0;}int main() {    int t;    scanf("%d", &t);    while (t--) {        int y, m, d, x;        scanf("%d %d %d %d", &y, &m, &d, &x);        f[2] = 28 + check(y);        d += x;        while (d > f[m]) {            d -= f[m];            ++m;            if (m > 12) {                m = 1;                ++y;                f[2] = 28 + check(y); //重新更新二月份的天数            }        }        printf("%04d-%02d-%02d\n", y, m, d);    }    return 0;}