日期差值 1096
問題描述
鏈接:https://www.nowcoder.com/questionTerminal/ccb7383c76fc48d2bbc27a2a6319631c
有兩個日期,求兩個日期之間的天數,如果兩個日期是連續的我們規定他們之間的天數為兩天
輸入描述:
有多組數據,每組數據有兩行,分別表示兩個日期,形式為YYYYMMDD
輸出描述:
每組數據輸出一行,即日期差值
示例1
輸入
20110412 20110422輸出
11思路
推薦思路(乾哥的思路):
軟男說算法能過就行, 盡可能把實現的方法想簡單些(emmmm)
- 計算第一個日期中月份和日到一月一日的天數, 記為days1
- 計算第一個日期中月份和日到一月一日的天數, 記為days2
- 只計算兩個日期的年份對應的日期差值
- 計算年之間差值
- 計算月之間差值
- 計算日之間差值
代碼
#include <cstdio>int month[13][2] = {//平年,閏年0, 0,31, 31,//一月28, 29,//二月31, 31,//三月30, 30,//四月31, 31,//五月30, 30,//六月31, 31,//七月31, 31,//八月30, 30,//九月31, 31,//十月30, 30,//十一月31, 31 //十二月 };int isLeap(int year) {/** 求平年閏年* 平年返回0* 閏年返回1*/if (year % 100 != 0 && year % 4 == 0 || year % 400 == 0) {return 1;} else {return 0;} }int main() {int y1 = 0, m1 = 0, d1 = 0, y2 = 0, m2 = 0, d2 = 0;while (scanf("%4d%2d%2d", &y1, &m1, &d1) != EOF) {scanf("%4d%2d%2d", &y2, &m2, &d2);//平年365天//閏年366天int days1 = 0;//日期一, 月及日到當年一月一日的天數int days2 = 0;//日期二, 月及日到當年一月一日的天數int days = 0; //最后返回兩日期的差值for (int i = 1; i < m1; ++i) {/** 求日期一, 月到當年一月一日的天數*/days1 += month[i][isLeap(y1)];}for (int i = 1; i < m2; ++i) {/** 求日期二, 月到當年一月一日的天數*/days2 += month[i][isLeap(y2)];}//求日期一,日期二, 日到當月一日的天數days1 += d1;days2 += d2;//求兩日期年份差值if (y1 > y2) {for (; y2 < y1; y2++) {if (isLeap(y2) == 1) {days += 366;} else {days += 365;}}days += days1 - days2;} else {for (; y1 < y2; y1++) {if (isLeap(y1) == 1) {days += 366;} else {days += 365;}}days += days2 - days1;}//按照題目敘述,需要返回差值加一printf("%d\n", days + 1);} }轉載于:https://www.cnblogs.com/edhg/p/7745914.html
總結
- 上一篇: 商城商品购买数量增减的完美JS效果
- 下一篇: 转:智能音箱市场深度报告:怎么大家都在抢