算自己活了多久!

qjh2b 2011-10-01 08:50:52
现在上大一 按老师要求编写‘自己活了多久’。。貌似算法上有点问题 请高手解救。
#include<stdio.h>
main(){
int year,month,day,year2,month2,day2;
int sum;

printf("please input your birthday 'year' 'month' 'day'\n");
printf("please input today 'year' 'month' 'day'\n");
scanf("%d %d %d %d %d %d\n",&year,&month,&day,&year2,&month2,&day2);
switch(month){
case 1:
if(year%4==0&&year%100!=0||year%400==0){ //闰年//
sum=sum+30*4+31*6+29+(31-day+1);
sum=sum+((year2-year)*366);
}
else{ //平//
sum=sum+30*4+31*6+28+(31-day+1);
sum=sum+((year2-year)*365);
}
case 2:
if(year%4==0&&year%100!=0||year%400==0){ //闰年//
sum=sum+30*4+31*6+(29-day+1);
sum=sum+((year2-year)*366);

}
else{ //平//
sum=sum+30*4+31*6+(28-day+1);
sum=sum+((year2-year)*365);
}
case 3:
sum=sum+30*4+31*5+(31-day+1);
case 4:
sum=sum+30*3+31*5+(30-day+1);
case 5:
sum=sum+30*3+31*4+(31-day+1);
case 6:
sum=sum+30*2+31*4+(30-day+1);
case 7:
sum=sum+30*2+31*3+(31-day+1);
case 8:
sum=sum+30*2+31*2+(31-day+1);
case 9:
sum=sum+30*1+31*2+(30-day+1);
case 10:
sum=sum+30*1+30*1+(31-day+1);
case 11:
sum=sum+30*0+31*1+(30-day+1);
case 12:
sum=sum+30*0+31*0+(31-day+1);
}
if(year%4==0&&year%100!=0||year%400==0){ //闰年//
switch(month2){
case 1:
sum=sum+30*0+31*0+(31-day2);
case 2:
sum=sum+30*0+31*1+(29-day2);
case 3:
sum=sum+30*0+31*1+(31-day2)+29;
case 4:
sum=sum+30*0+31*2+(30-day2)+29;
case 5:
sum=sum+30*1+31*2+(31-day2)+29;
case 6:
sum=sum+30*1+31+3+(30-day2)+29;
case 7:
sum=sum+30*2+31*3+(31-day2)+29;
case 8:
sum=sum+30*2+31*4+(31-day2)+29;
case 9:
sum=sum+30*2+31*5+(30-day2)+29;
case 10:
sum=sum+30*3+31*5+(31-day2)+29;
case 11:
sum=sum+30*3+31*6+(30-day2)+29;
case 12:
sum=sum+30*4+31*6+(31-day2)+29;
}
}
else{ //平//
switch(month2){
case 1:
sum=sum+30*0+31*0+(31-day2);
case 2:
sum=sum+30*0+31*1+(29-day2);
case 3:
sum=sum+30*0+31*1+(31-day2)+28;
case 4:
sum=sum+30*0+31*2+(30-day2)+28;
case 5:
sum=sum+30*1+31*2+(31-day2)+28;
case 6:
sum=sum+30*1+31+3+(30-day2)+28;
case 7:
sum=sum+30*2+31*3+(31-day2)+28;
case 8:
sum=sum+30*2+31*4+(31-day2)+28;
case 9:
sum=sum+30*2+31*5+(30-day2)+28;
case 10:
sum=sum+30*3+31*5+(31-day2)+28;
case 11:
sum=sum+30*3+31*6+(30-day2)+28;
case 12:
sum=sum+30*4+31*6+(31-day2)+28;
}
}
printf("%d",sum);
getch();

}
...全文
357 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
qjh2b 2011-10-02
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 udbwcso 的回复:]
只需要知道你活的这么多年里有多个闰年就好了
活了多少年 * 365 + 闰年数 = 活的天数
[/Quote]应该还要再弄下出生日到出生年和今年过了多少天呀
不过的建议我区试试
谢谢
qjh2b 2011-10-02
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 longyi007 的回复:]
死后自会长眠
[/Quote]我暂时只想算下 不急进坟墓。。。
qjh2b 2011-10-02
  • 打赏
  • 举报
回复
真心谢谢9楼和13楼的帮助 谢谢
do__i 2011-10-02
  • 打赏
  • 举报
回复
以前写的,供参考
#include<stdio.h>
typedef struct TimeData
{
int year,month,day;
}myTime;

int LeapYear(int year)
{
if(year%4==0 && year%100!=0 || year%400==0)
return 1;
else
return 0;
}

int CalculateDays(int year, int month, int day)
{
if( LeapYear(year)==1 )
if( month==1 )
return day;
else if( month==2 )
return 31+day;
else if( month==3 )
return 31+29+day;
else if( month==4 )
return 31*2+29+day;
else if( month==5 )
return 31*2+29+30+day;
else if( month==6 )
return 31*3+29+30+day;
else if( month==7 )
return 31*3+30*2+29+day;
else if( month==8 )
return 31*4+30*2+29+day;
else if( month==9 )
return 31*5+30*2+29+day;
else if( month==10 )
return 31*5+30*3+29+day;
else if( month==11 )
return 31*6+30*3+29+day;
else
return 31*6+30*4+29+day;
else
if( month==1 )
return day;
else if( month==2 )
return 31+day;
else if( month==3 )
return 31+28+day;
else if( month==4 )
return 31*2+28+day;
else if( month==5 )
return 31*2+30+28+day;
else if( month==6 )
return 31*3+30+28+day;
else if( month==7 )
return 31*3+30*2+28+day;
else if( month==8 )
return 31*4+30*2+28+day;
else if( month==9 )
return 31*5+30*2+28+day;
else if( month==10 )
return 31*5+30*3+28+day;
else if( month==11 )
return 31*6+30*3+28+day;
else
return 31*6+30*4+28+day;
}


int main()
{
myTime date1,date2;
printf("Input the date of your birthday (xxxx xx xx)\n");
scanf("%d %d %d",&date1.year,&date1.month,&date1.day);
printf("Input the date of \"today\"\n");
scanf("%d %d %d",&date2.year,&date2.month,&date2.day);

//判断闰年
int lower,upper,amount=0;
for(lower=date1.year,upper=date2.year;lower<upper;++lower)
if( LeapYear(lower)==1 )
++amount;

printf("tian shu:\n");
printf("%d\n",365*(date2.year-date1.year)+amount-(CalculateDays(date1.year,date1.month,date1.day)-1)+CalculateDays(date2.year,date2.month,date2.day));
return 0;
}



MYMGrub 2011-10-01
  • 打赏
  • 举报
回复
LZ这位老师的算法真是又长又那啥啊...
AndyZhang 2011-10-01
  • 打赏
  • 举报
回复
注意规范啊
大道曙光 2011-10-01
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 keiy 的回复:]

用C标准函数,更合理些?
C/C++ code

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(int argc, char* argv[])
{
time_t t_birthday,t_today;
struct tm time_birthday, time_today;
double……
[/Quote]:-)
柯本 2011-10-01
  • 打赏
  • 举报
回复
不好意思,程序有bug,改进过的

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(int argc, char* argv[])
{
time_t t_birthday,t_today;
struct tm time_birthday, time_today;
long live_time;
int year,month,day,year2,month2,day2;

printf("please input your birthday 'year' 'month' 'day'\n");
printf("please input today 'year' 'month' 'day'\n");
scanf("%d %d %d %d %d %d",&year,&month,&day,&year2,&month2,&day2);

time_birthday.tm_year = year-1900;
time_birthday.tm_mon = month ;
time_birthday.tm_mday = day;
time_birthday.tm_hour = 0;
time_birthday.tm_min = 0;
time_birthday.tm_sec = 0;
time_birthday.tm_isdst =0;

time_today.tm_year = year2-1900 ;
time_today.tm_mon = month2 ;
time_today.tm_mday = day2;
time_today.tm_hour = 0;
time_today.tm_min = 0;
time_today.tm_sec = 0;
time_today.tm_isdst =0;


t_birthday = mktime(&time_birthday);
t_today = mktime(&time_today);


live_time=difftime( t_today ,t_birthday );
printf("Live time:%d(Second)\t%d(Day)\n",live_time,(int)(live_time/86400));
live_time= t_today -t_birthday ;
printf("Live time:%d(Second)\t%d(Day)\n",live_time,(int)(live_time/86400));
system("pause");
return 0;
}
//---------------------------------------------------------------------------


另外注意:
The allowable range of calendar times is Jan 1 1970 00:00:00 to Jan 19 2038 03:14:07.
尘缘udbwcso 2011-10-01
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 udbwcso 的回复:]
只需要知道你活的这么多年里有多个闰年就好了
活了多少年 * 365 + 闰年数 = 活的天数
[/Quote]

算掉了天数
还有几月几号出生,详细的楼主自己可以算一下
大概就是这个思路
ljhhh0123 2011-10-01
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 keiy 的回复:]
用C标准函数,更合理些?

C/C++ code


#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(int argc, char* argv[])
{
time_t t_birthday,t_today;
struct tm time_birthday, time_today;……
[/Quote]
真好。
柯本 2011-10-01
  • 打赏
  • 举报
回复
用C标准函数,更合理些?

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(int argc, char* argv[])
{
time_t t_birthday,t_today;
struct tm time_birthday, time_today;
double live_time;
int year,month,day,year2,month2,day2;

printf("please input your birthday 'year' 'month' 'day'\n");
printf("please input today 'year' 'month' 'day'\n");
scanf("%d %d %d %d %d %d",&year,&month,&day,&year2,&month2,&day2);

time_birthday.tm_year = year-1900;
time_birthday.tm_mon = month ;
time_birthday.tm_mday = day;
time_birthday.tm_hour = 0;
time_birthday.tm_min = 0;
time_birthday.tm_sec = 0;
time_birthday.tm_isdst = 0;

time_today.tm_year = year2-1900 ;
time_today.tm_mon = month2 ;
time_today.tm_mday = day2;
time_today.tm_hour = 0;
time_today.tm_min = 0;
time_today.tm_sec = 0;
time_today.tm_isdst = 0;


t_birthday = mktime(&time_birthday);
t_today = mktime(&time_today);
live_time=difftime( t_today ,t_birthday );
printf("Live time:%.0f(Second)\t%d(Day)\n",live_time,(int)(live_time/86400));
system("pause");
return 0;
}
//---------------------------------------------------------------------------

yjjlyyj151 2011-10-01
  • 打赏
  • 举报
回复
++[Quote=引用 4 楼 udbwcso 的回复:]

只需要知道你活的这么多年里有多个闰年就好了
活了多少年 * 365 + 闰年数 = 活的天数
[/Quote]
尘缘udbwcso 2011-10-01
  • 打赏
  • 举报
回复
只需要知道你活的这么多年里有多个闰年就好了
活了多少年 * 365 + 闰年数 = 活的天数
blueapples0604 2011-10-01
  • 打赏
  • 举报
回复
算法很糟
Athenacle_ 2011-10-01
  • 打赏
  • 举报
回复
生前何必久睡,死后自会长眠,LZ我建议重构下你的代码,划分为子函数。。
longyi007 2011-10-01
  • 打赏
  • 举报
回复
死后自会长眠

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧