این تابع شماره سال را به عنوان ورودی می گیرد در صورت کبیسه بودن مقدار یک و در غیر این صورت مقدار صفر بر میگرداند.
منطق برنامه اینست که سال های 1367و1371 را بعنوان مبداء میگیرد بعد با توجه به کوچکتر یا بزرگتر بودن سال نسبت به این دو مبداء چهارتا چهارتا کم یا زیاد میشود تا عدد حاصل به سال مورد نظر برسد اگر رسید کبیسه است وگرنه نیست.
int is_leap_year(int y){
int count=1367,tmp=0;
while(count>y)
count=count-4;
if(count==y)
tmp=count;
count=1371;
while(count count=count+4; if((tmp==y)||(count==y)) return 1; else return 0; } خب راه حل بالا برای شروع خوب است اما چندان جالب نیست. در واقع این راه حل پیچیدگی زمانی بهینه ای ندارد اما به عنوان تمرین قابل قبول است. اما راه حل بهتر یک خط فرمول ریاضی است. میدانیم که هر چهار سال یک بار سال کبیسه واقع می شود. پس میتوان با یک تقسیم بر چهار سال کبیسه را شناسایی کرد. اما یک مشکل کوچک وجود دارد. مشکل این است که عدد سال در تقسیم بر چهار باید چه ویژگی داشته باشد؟ در ریاضیات مبحث بخشپذیری مطلبی با عنوان اعداد همنهشت مطرح میشود که میگوید عدد a در تقسیم بر b باقیمانده ای خواهد داشت که بین صفر تا b-1 است بنابراین تمام اعداد را میتوان در b مجموعه قرار داد که اعضا هر مجموعه در تقسیم بر b دارای باقیماده ی یکسان هستند. حال با در نظر گرفتن این مطلب میتوان نشان داد که سالهایی را که بعنوان مبدا در نظر گرفته بودیم در تقسیم بر چهار دارای باقیمانده ی 3 هستند. پس سال های کبیسه اعداد با باقیمانده ی 3 در تقسیم بر چهار هستند. بنابراین عبارت year%4==3 میتواند کبیسه بودن یک سال را مشخص کند. int is_leap_year(int y){ return y%4==3; }




