总结
cin 判断输入是否到末尾 使用cin.eof() ,如果读文件到达文件末尾,返回true
#include <iostream>
#include <cmath>
#include <string>
using namespace std;
int isLeap(int year){
return ((year % 4 == 0 && year % 100 != 0 ) || (year % 400 == 0)) ? 1 :0;
}
int calculator(string a,string b){
//使得a日期必然为小于等于b日期
if (stoi(a) > stoi(b)) {
swap(a,b);
}
int sum = 1;//计数
int months[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 ayear = stoi(a.substr(0,4));
int byear = stoi(b.substr(0,4));
//截取月
int amonth = stoi(a.substr(4,2));
int bmonth = stoi(b.substr(4,2));
//截取日
int aday = stoi(a.substr(6,2));
int bday = stoi(b.substr(6,2));
//如a年份小于b,使a,b年份差值缩小为1,并计算天数
while (ayear < byear - 1) {
isLeap(ayear) ? sum += 366 : sum += 365;
ayear++;
}
while(ayear < byear || amonth < bmonth || aday < bday){
aday++;
//日期超则月份++
if(aday > months[amonth][isLeap(ayear)]){
aday = 1;//重置天数
amonth++;
//月份超则年份++
if (amonth > 12) {
amonth = 1;//重置月份
ayear++;
}
}
sum++;
}
return sum;
}
int main(){
string a,b;
while (!cin.eof()){
cin >> a >> b;
cout << calculator(a,b) << endl;
}
return 0;
}