怎么计算某日为该年的第几天

如何计算某日为该年的第几天?
如何计算某日为该年的第几天?这题应该怎么想?不用写程序!说说算法!

------解决方案--------------------
daysofmonth[] = {31,28,...}
x月就把前x-1个加起来再加y日,闰年2月以后再加1
------解决方案--------------------
算法:

1,先判断是否是润年:公式都已经普的很普及了
2,如果是润年,则2月是29天,不是28天

3,列表:int days[12]= {31,28,31,30,31,30,31,31,30,31,30,31}
列表:润年:int days2[12]= {31,29,31,30,31,30,31,31,30,31,30,31}

4, m月 d 号:

m==1, n=d;
m>1
n= days[0]+days[1]+...days[m-2] +d

n 表示改年第几天

------解决方案--------------------
# include "stdio.h"
void main ()
{
int leap (int);
int year,month,day,i,n=0;
int a[12]={31,28,31,30,31,30,31,31,30,31,30,31};
printf ("请输入日期(形如:2007/4/19)");
scanf ("%d/%d/%d",&year,&month,&day);
if(leap(year))
a[1]=29;
if(month!=1)
for(i=0;i<=month-2;i++)
n+=a[i];
n+=day;
printf ("这是%d年的第%d天",year,n);
}
int leap(int year)
{
int z;
z=(year%400==0)||(year%4==0&&year%100!=0);
return z;
}
------解决方案--------------------
原帖:
http://topic.csdn.net/u/20100310/19/685e161c-d246-45af-a5e8-12d8d518095c.html
C/C++ code

#include <stdio.h> 

struct date {
    int year;
    int month;
    int day;
};

int is_leap_year(int year)
{
    return year % 4 == 0 && year % 100 != 0 || year % 400 == 0;
}

int day_of_year(struct date *d)
{
    static int data[2][12] = {{31,28,31,30,31,30,31,31,30,31,30,31},
                            {31,29,31,30,31,30,31,31,30,31,30,31}};
    int i, j;
    int result = d->day;
    j = is_leap_year(d->year);
    for (i = 0; i < d->month-1; ++i) {
        result += data[j][i];
    }
    return result;
}

int main()
{
    struct date d;
    /*
    d.year = 2010;
    d.month = 3;
    d.day = 10;
    */
    printf("请输入年月日(yyyy-mm-dd): ");
    scanf("%d-%d-%d", &d.year, &d.month, &d.day);
    printf("%d年%d月%d日是该年中的第%d天.\n", d.year, d.month, d.day, day_of_year(&d));
    return 0;
}

------解决方案--------------------
题目:输入某年某月某日,判断这一天是这一年的第几天? 
1.程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊 
      情况,闰年且输入月份大于3时需考虑多加一天。 
2.程序源代码: 
main() 

int day,month,year,sum,leap; 
printf("\nplease input year,month,day\n"); 
scanf("%d,%d,%d",&year,&month,&day); 
switch(month)/*先计算某月以前月份的总天数*/ 

 case 1:sum=0;break; 
 case 2:sum=31;break; 
 case 3:sum=59;break; 
 case 4:sum=90;break; 
 case 5:sum=120;break; 
 case 6:sum=151;break; 
 case 7:sum=181;break; 
 case 8:sum=212;break; 
 case 9:sum=243;break;
 case 10:sum=273;break; 
 case 11:sum=304;break; 
 case 12:sum=334;break; 
 default:printf("data error");break; 

sum=sum+day;  /*再加上某天的天数*/ 
 if(year%400==0||(year%4==0&&year%100!=0))/*判断是不是闰年*/ 
  leap=1; 
 else 
  leap=0; 
if(leap==1&&month>2)/*如果是闰年且月份大于2,总天数应该加一天*/ 
sum++; 
printf("It is the %dth day.",sum);} 



从这抄的:http://tieba.baidu.com/f?kz=8618367
------解决方案--------------------
探讨

引用:
算法:

1,先判断是否是润年:公式都已经普的很普及了
2,如果是润年,则2月是29天,不是28天

3,列表:int days[12]= {31,28,31,30,31,30,31,31,30,31,30,31}