若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。
題目在此,
此題筆者用Java寫,因為Java有好用的 API BigInteger 阿。
用 Python 時,可以用eval函數。
基本上此題是用陣列來處理,此部分可參考 超長整數運算(大數運算)一文。
程式碼:
程式設計可以改變您的未來(Programming can change your future)。 雲林SONG 全名為雲林軟體工程(SOftware eNGineering),目標致力於軟體人才的培養並推廣開源軟體落實於資訊教育。程式設計的觀念是軟體產品的基礎,程式碼就像沙子一樣,要紮實,所建立出來的高塔才會穩固。本站也提供資訊教育相關的教學資源。 YunlinSONG stands for Yunlin SOftware eNGineering, offering tutorial for computer programming and promoting open-source software. Teaching resources in information technology education are provided here.
▼
高中生程式解題系統:日期差幾天
若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。
題目連結 http://zerojudge.tw/ShowProblem?problemid=a263。
這題需要注意閏年的判斷。筆者用一個陣列daysPerMon[13]來紀錄每個月有幾天。
要算出西元 0 年 1 月 1 日 到 西元 y 年 m 月 d 日總過經過多少天數。
算法是先算出從西元 0 年到今年 y 經過多少天,再算出到這個月 m 經過多少天,加上今天的 d 。
於是可以得到 daysCnt(y1, m1, d1)與 daysCnt(y2, m2, d2) ,再將這兩個值相減會是要的答案。
程式碼:
題目連結 http://zerojudge.tw/ShowProblem?problemid=a263。
這題需要注意閏年的判斷。筆者用一個陣列daysPerMon[13]來紀錄每個月有幾天。
要算出西元 0 年 1 月 1 日 到 西元 y 年 m 月 d 日總過經過多少天數。
算法是先算出從西元 0 年到今年 y 經過多少天,再算出到這個月 m 經過多少天,加上今天的 d 。
於是可以得到 daysCnt(y1, m1, d1)與 daysCnt(y2, m2, d2) ,再將這兩個值相減會是要的答案。
程式碼:
#include <cstdio>
#include <iostream>
using namespace std;
int daysPerMon[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
bool isLeapYear(int year)
{
return (year % 4 == 0 && year % 100 || year % 400 == 0);
}
int daysCnt(int year, int month, int day)
{
int sumOfDays = 0;
for(int i = 1; i < year; i++)
{
bool isLeap = isLeapYear(i);
if(isLeap)
{
sumOfDays += 366;
}
else
{
sumOfDays += 365;
}
}
for(int i = 1; i < month; i++)
{
sumOfDays += daysPerMon[i];
}
if(isLeapYear(year) && month > 2)
sumOfDays++;
sumOfDays += day;
//cout << "Total Days:" << sumOfDays << endl;
return sumOfDays;
}
int dateDif(int y1, int m1, int d1, int y2, int m2, int d2)
{
return daysCnt(y1, m1, d1) - daysCnt(y2, m2, d2);
}
int main() {
int year[2], month[2], day[2];
while(scanf("%d%d%d %d%d%d", &year[0], &month[0], &day[0], &year[1], &month[1], &day[1]) != EOF)
{
int result = dateDif(year[0], month[0], day[0], year[1], month[1], day[1]);
if( result < 0)
result = - result;
cout << result << endl;
}
return 0;