|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
要求计算某年到某年的天数,可是我的算出来老是会多几天,(虽然知道有问题,但是感觉我这个思路是对的,就是不知道哪算错了),我先算年有多少天,然后再算最后年份相等的时候的月有多少天,最后算月相同时有多少天
int main(){
long int Nian,Yue,Ri,sum=0;
long int Xnian,Xyue,Xri;
int a[12]={31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},i,j;
printf("请输入您的生日(例如:1998,05,16):");
scanf("%d,%d,%d",&Nian,&Yue,&Ri);
printf("请输入今年的日期(例如:2021,10,23):");
scanf("%d,%d,%d",&Xnian,&Xyue,&Xri);
for(Nian;Nian<Xnian;Nian++){
if(Nian%400==0 || (Nian%4==0 && Nian%100!=0)){
sum=sum+366;
}else {
sum=sum+365;
}
}
if(Xnian%400==0 || (Xnian%4==0 && Xnian%100!=0)){
for(Yue;Yue<Xyue;Yue++){
a[2]=29;
sum=sum+a[Yue-1];
}
}else {
for(Yue;Yue<Xyue;Yue++){
sum=sum+a[Yue-1];
}
}
if(Xnian%400==0 || (Xnian%4==0 && Xnian%100!=0)){
a[2]=29;
for(Yue;Yue=Xyue;){
sum=sum+a[Yue-1]-Ri+Xri;
break;
}
}else {
for(Yue;Yue=Xyue;){
sum=sum+a[Yue-1]-Ri+Xri;
break;
}
}
printf("您已经在这个地球上生活了:%ld 天",sum);
return 0;
}
本帖最后由 jackz007 于 2022-10-21 01:09 编辑
计算天数首先应该考虑是否跨年,两种情况应该区别对待: #include <stdio.h>
#define LEAP(Y) (! ((Y) % 400) || (! ((Y) % 4) && (Y) % 100))
int mday(int y , int m)
{
int a[12] = {31 , 28 , 31 , 30 , 31 , 30 , 31 , 31 , 30 , 31 , 30 , 31} , r ;
r = a[m - 1] ;
if(m == 2 && LEAP(y)) r ++ ;
return r ;
}
int main(void)
{
long int Nian , Yue , Ri , sum = 0 ;
long int Xnian , Xyue , Xri ;
int e , i ;
printf(" 请输入您的生日(例如: 1998,05,16) : ") ;
scanf("%d,%d,%d", & Nian , & Yue , & Ri) ;
printf("请输入今年的日期(例如: 2021,10,23) : ") ;
scanf("%d,%d,%d", & Xnian , & Xyue , & Xri) ;
if(Xnian > Nian || Xnian == Nian && Xyue > Yue || Xnian == Nian && Xyue == Yue && Xri >= Ri) {
if(Xnian == Nian) {
if(Xyue == Yue) sum = Xri - Ri ;
else for(sum = Xri - Ri ; Yue < Xyue ; Yue ++) sum += mday(Nian , Yue) ;
} else {
for(sum = Xri - Ri , i = 1 ; i < Yue ; i ++) sum -= mday(Nian , i) ;
for(; Nian < Xnian ; Nian ++) sum += LEAP(Nian) ? 366 : 365 ;
for(Yue = 1 ; Yue < Xyue ; Yue ++) sum += mday(Xnian , Yue) ;
}
printf(" 您已经在这个地球上生活了: %ld 天\n" , sum) ;
} else {
fprintf(stderr , "日期输入错误\n") ;
}
}
编译、运行实况: D:\[00.Exerciese.2022]\C>g++ -o x x.c
D:\[00.Exerciese.2022]\C>x
请输入您的生日(例如: 1998,05,16) : 2021,1,1
请输入今年的日期(例如: 2021,10,23) : 2022,10,20
您已经在这个地球上生活了:657 天
D:\[00.Exerciese.2022]\C>x
请输入您的生日(例如: 1998,05,16) : 2021,10,20
请输入今年的日期(例如: 2021,10,23) : 2022,10,20
您已经在这个地球上生活了:365 天
D:\[00.Exerciese.2022]\C>x
请输入您的生日(例如: 1998,05,16) : 2020,1,1
请输入今年的日期(例如: 2021,10,23) : 2020,3,1
您已经在这个地球上生活了:60 天
D:\[00.Exerciese.2022]\C>x
请输入您的生日(例如: 1998,05,16) : 2021,12,31
请输入今年的日期(例如: 2021,10,23) : 2022,1,1
您已经在这个地球上生活了:1 天
D:\[00.Exerciese.2022]\C>
|
|