1. 程式人生 > >C++實現通過年份與天數判斷月份日期

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

近期為了準備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<iostream>
using namespace std; bool isRunyear(int year) { if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) { return true; } else{ return false; } } int main(){ int year; cin >> year; int day; cin >> day; bool bl; bl = isRunyear(year); int
iArr[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; int count = 0,count1=0; if (bl==true) { //表明是閏年 iArr[1] = 29; for (int i = 0; i < 12; i++) { count1 = count; count += iArr[i]; if (day>count1&&day <= count){ cout
<< i+1 << endl; cout << day - count1 << endl; break; } } } else{ //表明是平年 for (int i = 0; i < 11; i++) { count1 = count; count += iArr[i]; if (day>=count1&&day <= count){ cout << i + 1 << endl; cout << day - count1 << endl; break; } // else if (day == count){ // cout << i + 1 << endl; // cout << day - count1 << endl; // } } } return 0; }

接著是執行結果:
前面兩行是你輸入的資料,後面的是輸出結果
(https://img-blog.csdn.net/20160902160654748)
這裡為使整個結構看得更清晰一點,我把是不是閏年單拿出來,寫成外部函式。很簡單的一段,我就不詳細說了。主要是下面判斷幾月份以及具體哪一天的時候是關鍵點:
首先,把平年的每個月到底有幾天,以陣列的形式存起來,在下面的判斷是不是閏年之後,直接改變iArr[1](即二月份的天數)的值。用兩個計數變數,是用來儲存加iArr[i]之前與加之後的兩個值,這樣雖然宣告的變數多了,佔的空間多了,但至少思路更清晰,更容易明白。

    for (int i = 0; i < 12; i++)
        {
            count1 = count;
            count += iArr[i];
            if (day>count1&&day <= count){
                cout << i+1 << endl;
                cout << day - count1 << endl;
                break;
            }
        }
for迴圈是為了累加,當你輸入的d資料恰好大於加iArr[i]之前的值,又小於加完以後的天數時,說明找到了那個臨界點,由於i 還是下標,所以加一,就能得到月份,day-count1就恰好是那個月的第幾天了。
這裡還有個注意事項,就是臨界狀態,你所輸入的資料,恰好是某個月最後一天,這樣所單獨拿出來,測試了一下:
    //      else if (day == count){
    //      cout << i + 1 << endl;
    //      cout << day - count1 << endl;
    //      }

後來一看,跟把它直接加入到上面的迴圈判斷的時候一樣,所以,就註釋掉了。
當然,這份程式碼還有好多沒有考慮到:
比如:輸入的資料是否符合要求,年份,天數,都要進行判斷,還要儘可能的簡化程式碼。