24-11-2006, 05:38
|
|
|
|
חבר מתאריך: 15.08.06
הודעות: 465
|
|
כתבתי לך..עם הערות...
קוד PHP:
#include <iostream> int last(int month, int year) { //מחזירה את היום האחרון בחודש ובשנה.. switch (month) { case 2: //אם זה פברואר,אז כל שנה רביעית שאינה שנת מאה, או כל מאה רביעית נוסף יום if (((!(year % 4) && (year % 100))) || (!(year % 400))) return 29; else return 28; case 4: case 6: case 9: case 11: return 30; default: return 31; } }
long calc(int day, int month, int year) { //מחזיר מס' ימים מתחילת הספירה עד התאריך int N = day; // מס' הימים שעברו בחודש month for (int m=month-1; m;--m) // מס' הימים בכל החודשים לפני month בשנה הנוכחית N = N + last(m, year); return (N // מס' הימים שעברו ב year עד day/month + 365 * (year - 1) // מס' הימים בכל השנים שעברו מתחילת הספירה, בלי להתחשב במקרים מיוחדים + (year-1)/4 // כל שנה רביעית נוסף יום לפברואר.. - (year - 1)/100 // כל שנה 100ית, שהיא גם שנה רביעית, לא נוסף.. + (year - 1)/400); //כל מאה רביעית, מה שלמעלה לא קורה }
long between(int d1, int m1, int y1, int d2, int m2, int y2){ return calc(d2,m2,y2) - calc(d1,m1,y1); //נחזיר את הפרש הימים, כדי לקבל כמה ימים בין התאריכים (לא כולל את היום של התאריך הראשון, כמובן) }
int main(){ int i; cout << calc(31,12,1989) << "\n"; cout << between(31,12,1989,31,12,2006); cin >> i; }
_____________________________________
Any sufficiently advanced bug is indistinguishable from a feature
|