求兩個年份之間閏年的數目

2021-07-04 23:33:32 字數 847 閱讀 4781

最開始碰到的是這個問題,求給定的兩個數之間能同時被2,3,5整除的數,可以發現如果乙個數能同時被2,3,5整除,那麼它肯定可以被30整除。我們可以編寫乙個函式判斷乙個數是否可以被30整除,然後遍歷給定的兩個數中的區間逐個地判斷就可以了。

//解法一

bool isnums(int num)

int calculatenums2(int begin,int end)

return count;

}

但是這種方法時間複雜度太高了。

有種很巧妙的辦法,就是直接求出[0,begin-1]中能被30整除的數的個數;

然後求出[0,end]中能被30整除的數的個數;

兩個相減就是[begin,end]之間能被30整除的數的個數了。

//解法二

int calculatenums1(int begin,int end)

這是常數時間的求解方法。

求閏年的次數也可以用這種方法求解。

能被4整除,但不能被100整除

能被400整除

那麼對於[0,begin-1]中閏年的數目可以這麼求解:

(begin-1)/4-(begin-1)/100+(begin-1)/400,即[0,begin-1]中4的倍數的個數減去100的倍數的個數,再加上400的倍數的個數。這點需要好好思考一下。這樣就可以在常數時間內求解了。

#include using namespace std;

int leapyears(int begin,int end)

int main()

{ cout<

計算兩個年份之間的月份

僅為測試,根據實際情況.public class test calendar startcalendar calendar.getinstance startcalendar.settime start calendar endcalendar calendar.getinstance endcal...

得到任意兩個年份之間的各個年份和各個年份所佔的月數

其中startdate必須大於等於enddate public class calendarmgr while startschoolyear endschoolyear int schoolyear new int arrschoolyears.count arrschoolyears.copyt...

求兩個Date之間的天數

利用jdk1.8的新特性,chronounit類獲取兩個日期之間的天數只差 chronounit是乙個列舉類,有一組標準的時間週期為單元的列舉值,它的列舉值是不變的,執行緒安全的。使用between 方法獲取兩個日期之間的天數差,當然不僅僅可以獲取天數差,可以獲取這個列舉類中任意乙個給出的時間單元的...