本文共 1987 字,大约阅读时间需要 6 分钟。
题目描述
有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天
输入描述: 有多组数据,每组数据有两行,分别表示两个日期,形式为YYYYMMDD输出描述:
每组数据输出一行,即日期差值示例1
输入20110412
20110422输出
11
代码
#include#include #include #include using namespace std;int datas[2][12]={ {31,28,31,30,31,30,31,31,30,31,30,31}, {31,29,31,30,31,30,31,31,30,31,30,31}};int isLeapYear(int year){ return (year%4==0&&year%100!=0)||year%400==0;}int numberOfYear(int year){ if(isLeapYear(year)) return 366; else return 365;}// 思路就是 年计算相对值,日期计算本年的值,然后多的年日期-少的年日期;+年的日子;int main(){ string time1; string time2; int year,month,day,year2,month2,day2; while(getline(cin,time1)&&getline(cin,time2)){ int num=1; //更好的读入方法: int flag = time1.compare(time2); year=stoi(time1.substr(0,4)); year2=stoi(time2.substr(0,4)); month=stoi(time1.substr(4,2)); month2=stoi(time2.substr(4,2)); day=stoi(time1.substr(6,2)); day2=stoi(time2.substr(6,2)); int numOfYear=abs(year-year2); // 函数化处理: int num1,num2; num1=num2=0; for(int i=0;i 0){// first is biger while(numOfYear>0){ num+=numberOfYear(year); year--; numOfYear--; } num+=(num1-num2); }else{ while(numOfYear>0){ num+=numberOfYear(year); year++; numOfYear--; } num+=(num2-num1); } printf("%d\n",num); } return 0;}
优秀答案:
#include#define leap(x) (x%400==0||(x%4==0&&x%100!=0)?1:0)#define Abs(x) ((x)>0?(x):-(x))typedef struct date{ int y, m, d;}Date;const int yd[2][13]={ {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}}; int days(Date x){ int sum=0, i; int y=x.y, m=x.m, d=x.d; for(i=0; i
转载地址:http://fnywi.baihongyu.com/