本文主要是介绍天勤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;elsereturn 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;
}
这篇关于天勤OJ 题目1448: 日期累加的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!