您的答案為: 538319 正確答案為: 538320.
#include<bits/stdc++.h>
using namespace std;
int main(){
ios::sync_with_stdio(false);
int y,m,d,y2,m2,d2;
while(cin>>y>>m>>d>>y2>>m2>>d2){
int day=d;
switch(m){
case 1:day+=0;break;
case 2:day+=31;break;
case 3:day+=59;break;
case 4:day+=90;break;
case 5:day+=120;break;
case 6:day+=151;break;
case 7:day+=181;break;
case 8:day+=212;break;
case 9:day+=243;break;
case 10:day+=273;break;
case 11:day+=304;break;
case 12:day+=334;break;
}day+=(y-1)*365;
day+=((y-1)/4-(y-1)/100+(y-1)/400);
int day2=d2;
switch(m2){
case 1:day2+=0;break;
case 2:day2+=31;break;
case 3:day2+=59;break;
case 4:day2+=90;break;
case 5:day2+=120;break;
case 6:day2+=151;break;
case 7:day2+=181;break;
case 8:day2+=212;break;
case 9:day2+=243;break;
case 10:day2+=273;break;
case 11:day2+=304;break;
case 12:day2+=334;break;
}day2+=(y2-1)*365;
day2+=((y2-1)/4-(y2-1)/100+(y2-1)/400);
cout<<abs(day-day2)<<"\n";
}
}
為什麼會少1?
給定以下測資:
2020 3 1
2020 1 1
您的程式會輸出:59 ,但實際上的差距是 60 天。
因為您的程式沒有考慮到 y1 、 y2 當年是否為閏年而且 m1 、 m2 有沒有超過 2 月。
以上。希望有幫助到您。
題外話:當使用了 ios::sync_with_stdio(false); 時,最好也使用一下 cin.tie(NULL) 喔。
不然光取消 cin 與標準輸出入(scanf)的連結是不夠的。cout 預設在每次 cin 之後會清空緩衝區(這樣會很慢),因此 cin.tie(NULL) 會解除這個狀態。因此 cout 只會在緩衝區滿了之後才將東西輸出。
給定以下測資:
2020 3 1
2020 1 1
您的程式會輸出:59 ,但實際上的差距是 60 天。
因為您的程式沒有考慮到 y1 、 y2 當年是否為閏年而且 m1 、 m2 有沒有超過 2 月。
以上。希望有幫助到您。
題外話:當使用了 ios::sync_with_stdio(false); 時,最好也使用一下 cin.tie(NULL) 喔。
不然光取消 cin 與標準輸出入(scanf)的連結是不夠的。cout 預設在每次 cin 之後會清空緩衝區(這樣會很慢),因此 cin.tie(NULL) 會解除這個狀態。因此 cout 只會在緩衝區滿了之後才將東西輸出。
AC了!謝謝