發表文章

目前顯示的是 10月, 2015的文章

高中生程式解題系統:TOI2008 2. 大數運算

題目在此 , 此題筆者用Java寫,因為Java有好用的 API BigInteger 阿。 用 Python 時,可以用 eval 函數。 基本上此題是用陣列來處理,此部分可參考 超長整數運算(大數運算) 一文。 程式碼: 若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

高中生程式解題系統:日期差幾天

題目連結 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 Day...