#include <iostream>
using namespace std;
int main()
{
int a, b;
int y, m, d;
int i = 0;
// cout << "Enter the year, month, day: " << endl;
while ( cin >> a >> b >> d )
{
int array[i];
if ( a/4 == 0)
{
y = a*366;
} else {
y = a*365;
}
if ( b==2 || b==4 || b==6 || b==7 || b==9 || b==11 )
{
m = b*31;
}
else if ( b==3 || b==5 || b==8 || b==10 )
{
m = b*30;
}
if ( (a/4 == 0) && (b=1) )
{
m = b*29;
}
else if ( (a/4 != 0) && (b=1) )
{
m = b*28;
}
array[i] = y+m+d;
//cout << "days = " << array[i];
//cout << endl;
i++;
if ( i == 2 )
{
array[i] = array[0] - array[1];
cout << array[i];
break;
}
}
return 0;
}
您宣告了
int i = 0;
之後沒有作任何更動就將其作為 array 陣列的大小。
直到
array[i] = y+m+d;
//cout << "days = " << array[i];
//cout << endl;
i++;
為止,才有修改 i 的語句。但是卻沒有將其重新初始化。導致 if (i == 2) 只會跑一次,且 array[i] 還不知道要取記憶體的哪個地方(因為宣告有誤,運氣不好會直接噴 Runtime Error)
而且 if 判斷式裡有一列 break 指令,會跳出 while 迴圈。但是題目有多筆測試資料,也就是輸入串流裡會有好幾列的數字,而不是只有兩列而已。
因此這個 break 指令是不能用的。
還有,您的程式碼若輸入
2012 2 28
2012 2 29
和
2012 2 29
2012 2 28
兩者的結果分別是 -1 和 1 ,然而應為 1 才對。因為題目並無保證兩日期誰先誰後,單純是問兩者的「差距」。
此外,您的閏年計算方式有誤,因此日期差會有偏差值。閏年是每 4 年閏一次,但每 100 年則不閏(除了每 400 年,此時需要閏)。
寫成虛擬碼即
(y % 4 == 0 && y % 100 != 0) || y % 400 == 0
以上,希望有幫助到您。