C 實現通過年份與天數判斷月份日期

2021-07-22 08:43:39 字數 1347 閱讀 8388

近期為了準備ccf認證考試,自己隨便練習遇到的一道經典題,所以寫下來,自己的思路想法。

先把題目列出來

給定乙個年份y和乙個整數d,問這一年的第d天是幾月幾日?

注意閏年的2月有29天。滿足下面條件之一的是閏年:

1)年份是4的整數倍,而且不是100的整數倍;

2)年份是400的整數倍。

輸入格式

第一行包含乙個整數y,表示年份,年份在1900到2015之間(包含1900和2015)。

輸出格式

輸出兩行,每行乙個整數d,d在1至365之間。

樣例輸入

2015

80樣例輸出

3 21

再上**,如果某些人需要,這樣就不用看後面了!

#include

using

namespace

std;

bool isrunyear(int year)

else

}int main();

int count = 0,count1=0;

if (bl==true)}}

else

// else if (day == count)}}

return

0;}

接著是執行結果:

前面兩行是你輸入的資料,後面的是輸出結果

( 這裡為使整個結構看得更清晰一點,我把是不是閏年單拿出來,寫成外部函式。很簡單的一段,我就不詳細說了。主要是下面判斷幾月份以及具體哪一天的時候是關鍵點:

首先,把平年的每個月到底有幾天,以陣列的形式存起來,在下面的判斷是不是閏年之後,直接改變iarr[1](即二月份的天數)的值。用兩個計數變數,是用來儲存加iarr[i]之前與加之後的兩個值,這樣雖然宣告的變數多了,佔的空間多了,但至少思路更清晰,更容易明白。

}

for迴圈是為了累加,當你輸入的d資料恰好大於加iarr[i]之前的值,又小於加完以後的天數時,說明找到了那個臨界點,由於i 還是下標,所以加一,就能得到月份,day-count1就恰好是那個月的第幾天了。

這裡還有個注意事項,就是臨界狀態,你所輸入的資料,恰好是某個月最後一天,這樣所單獨拿出來,測試了一下:

//      else if (day == count)
後來一看,跟把它直接加入到上面的迴圈判斷的時候一樣,所以,就注釋掉了。

當然,這份**還有好多沒有考慮到:

比如:輸入的資料是否符合要求,年份,天數,都要進行判斷,還要盡可能的簡化**。

天數最少的年份 簡易計算年份與年份之間的天數

原始碼類 package day2.homework1 public class mycalendar mydate date1 mydate date2 public mycalendar mydate date1,mydate date2 super this.date1 date1 this....

通過年月獲取當月的第一天和最後一天

研究同事 發現這個方法,原方法是用來獲取上月 本月 下月的yyyy mm dd格式日期,getmonth type,months if months 0 else if month months 1 else month month 10?0 month month var date d.getda...

實現通過C語言連線redis

實現c語言連線redis,首先需要將redis的環境配置好,即能實現用redis cli連線redis server。網上有很多教程,這裡就不再描述了。1.在存放redis的目錄中執行 cd deps hiredis 切換到hiredis目錄。2.在hiredis目錄中,執行 make。3.執行 c...