|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
各位老师,求助!!弄半天了~~总是计算不对,感觉方法是对的,求助求助~~!
想法是:
求出出生当年的年份到公元1年1月1日的天数,比如2000年,那么天数就是2000减去1,闰年就366,平年就365,循环加起来;
求出出生当年的月份,比如3月,那么就遍历数组day[0],day[1],day[2] 加起来,再加上出生日期那天,若是闰年则加多1天;
当前年月日,同上求出。
两者相减去,就是活了多少天。
第一次写这么多,还不知道怎么贴代码~~!
#include <stdio.h>
// 把公元1年1月1日定为起点,出生日期和当前日期到公元1年1月1日的天数相减为活了多长天数
int main()
{
int day[]={31,28,31,30,31,30,31,31,30,31,30,31};
int year1,year2,month1,month2,day1,day2;
int i;
long int sum1= 0,sum2 =0,days1=0,days2=0,result=0;
printf("请输入你的出生日期,如2000-2-3\n");
scanf("%d-%d-%d",&year1,&month1,&day1);
printf("请输当前日期,如2000-2-3\n");
scanf("%d-%d-%d",&year2,&month2,&day2);
// 计算出生那年到公元1年的天数
for(i=1,sum1 = 0;i<year1;i++)
{
if((( year1 % 4 == 0 ) &&(year1 % 100 != 0)) ||(year1 % 400 == 0))
{
sum1 += 366;
}
else
{
sum1 += 365;
}
}
//计算当前这年到公元1年的天数
for(i=1,sum2 = 0;i<year2;i++)
{
if((( year2 % 4 == 0 ) &&(year2 % 100 != 0)) ||(year2 % 400 == 0))
{
sum2 += 366;
}
else
{
sum2 += 365;
}
}
//计算出生那年月份及日期所占天数
for(i=0; i<= month1-1;i++) //先计算几个月的总天数
{
days1 += day[i];
}
if((month1 > 2) && (( year1 % 4 == 0 ) &&(year1 % 100 != 0)) ||(year1 % 400 == 0))//如果是闰年,并大于2月,则加多1天
{
days1 = days1 +1 ;
}
else
{
days1 = days1;
}
days1 = days1 + day1;
//计算当前这年月份及日期所占天数
for(i=0; i<= month2-1;i++)
{
days2 += day[i];
}
if((month2> 2) && (( year2 % 4 == 0 ) &&(year2 % 100 != 0)) ||(year2 % 400 == 0))
{
days2 = days2 +1 ;
}
else
{
days2 = days2;
}
days2 = days2 + day2;
printf("sum1=%d\n",sum1);
printf("sum2=%d\n",sum2);
printf("days1=%d\n",days1);
printf("days2=%d\n",days2);
result = ( sum1 + days1) - (sum2 + days2);
printf("从出生到现在你活了%d天啦!开心吗?",result);
return 0;
}
注意注释中的
// 此处犯了个大错,估计和你一样,leapYear(i)写成leapYear(year)了
#include <stdio.h>
int leapYear(int y);
int calcDay(int year, int month, int day);
// 把公元1年1月1日定为起点,出生日期和当前日期到公元1年1月1日的天数相减为活了多长天数
int main()
{
int startYear, startMonth, startDay, endYear, endMonth, endDay;
int startDays, endDays, myDays;
printf("请输入你的出生日期,如2000-2-3\n");
scanf("%d-%d-%d",&startYear,&startMonth,&startDay);
printf("请输当前日期,如2000-2-3\n");
scanf("%d-%d-%d",&endYear,&endMonth,&endDay);
startDays = calcDay(startYear, startMonth, startDay);
endDays = calcDay(endYear, endMonth, endDay);
myDays = endDays - startDays;
printf("从出生到现在你活了%d天啦!开心吗?\n", myDays);
}
int calcDay(int year, int month, int day)
{
int mday[]={31,28,31,30,31,30,31,31,30,31,30,31}; // 平年每月的天数,如果是润年2月要多1天
int i;
int days = 0;
// 计算年份中的天数
for(i=1; i<year; i++)
{
if(leapYear(i)) // 此处犯了个大错,估计和你一样,leapYear(i)写成leapYear(year)了
days += 366;
else
days += 365;
}
// 计算月份中的天数
for(i=0; i<month-1; i++)
{
if (leapYear(year) && (i+1 == 2)) // 当前年份是润年,且是2月,则加1天
days += mday[i] + 1;
else
days += mday[i];
}
// 加上当月中的天数
days += day;
return days;
}
//润年 1、能整除4且不能整除100 2、能整除4, 能整除100, 又能整除400
int leapYear(int y)
{
if (y%4==0) //1和2: 能整除4
{
if(y%100==0)//2: 能整除100
{
if(y%400==0)//2: 能整除400
{
return 1;
}
else
{
return 0;
}
}
else//1: 不能整除100
{
return 1;
}
}
else
{
return 0;
}
}
|
-
|