注册 登录
编程论坛 C++教室

计算10000天的日期,看看那里错了???????

haohaoxue 发布于 2007-09-17 15:47, 986 次点击

# include<iostream>
using namespace std;
int main()
{
int year,month,ri,i,d1=0,d,d2,day,j;
int a[12]={0,31,59,90,120,151,181,212,243,273,304,334};
int b[12]={0,31,60,91,121,152,182,213,244,274,305,335};
cin>>year>>month>>ri;
d=0;d1=0;d2=0;
if((year%4==0&&year%100!=0)||(year%400==0))
{ d1=b[month-1]+ri;
d=366-d1;
}
else
{
d1=a[month-1]+ri;
d=365-d1;
}
i=year+1;
while(d<=10000)
{

if((i%4==0&&i%100!=0)||(i%400==0))
{ d=d+366;
if(d>10000){d=d-366;break;}
}
else{
d=d+365;
if(d>10000){d=d-365;break;}
}
i++;
}

d2=10000-d;
if(d2==0)
{
cout<<i-1<<"-"<<12<<"-"<<31;
}
else

{ cout<<i<<"-";
if((i%4==0&&i%100!=0)||(i%400==0))
{ if(d2<=b[11])
{for(j=0;j<11;j++)
{
if(d2>=b[j]&&d2<b[j+1])
{cout<<j+1<<"-";
day=d2-b[j];
}
}
} else
{ cout<<12<<"-";
day=d2-335;}

cout<<day;
}
else
{ if(d2<=a[11])
{
for(j=0;j<11;j++)
{
if(d2>=a[j]&&d2<=a[j+1])
{cout<<j+1<<"-";
day=d2-a[j];
}
}
}
else {cout<<12<<"-";day=d2-334;}
cout<<day;
}
}
return 0;
}

3 回复
#2
haohaoxue2007-09-17 15:55

# include<iostream>
using namespace std;
int main()
{
int year,month,ri,i,d1=0,d,d2,day,j;
int a[12]={0,31,59,90,120,151,181,212,243,273,304,334};
int b[12]={0,31,60,91,121,152,182,213,244,274,305,335};/*用数组保存1到11月的天数*/
cin>>year>>month>>ri;
d=0;d1=0;d2=0;
if((year%4==0&&year%100!=0)||(year%400==0))/*判断是否闰年*/
{ d1=b[month-1]+ri;
d=366-d1;
}
else
{
d1=a[month-1]+ri;
d=365-d1;
}/*计算输入的当年的剩下的天数*/
i=year+1;
while(d<=10000)
{

if((i%4==0&&i%100!=0)||(i%400==0))
{ d=d+366;
if(d>10000){d=d-366;break;}
}
else{
d=d+365;
if(d>10000){d=d-365;break;}
}
i++;
}/*计算不超过10000天但和10000天差不到1年的年数*/

d2=10000-d;
if(d2==0)
{
cout<<i-1<<"-"<<12<<"-"<<31;/*这一行是判断刚好10000天的情况*/
}
else

{ cout<<i<<"-";
if((i%4==0&&i%100!=0)||(i%400==0))
{ if(d2<=b[11])
{for(j=0;j<11;j++)
{
if(d2>=b[j]&&d2<b[j+1])
{cout<<j+1<<"-";
day=d2-b[j];
}
}
} else
{ cout<<12<<"-";
day=d2-335;}

cout<<day;
}
else
{ if(d2<=a[11])
{
for(j=0;j<11;j++)
{
if(d2>=a[j]&&d2<=a[j+1])
{cout<<j+1<<"-";
day=d2-a[j];
}
}
}
else {cout<<12<<"-";day=d2-334;}
cout<<day;
}/*最后这几行是计算最后那年的月和日*/
}
return 0;
}

#3
haohaoxue2007-09-17 15:56
这道题的输入是年,月,日,
输出是10000天后的年,月,日!
#4
雨中飞燕2007-09-17 16:10
估算加二分搜索会简单一些



by 雨中飞燕 QQ:78803110 QQ讨论群:5305909

[url=http://bbs.bc-cn.net/viewthread.php?tid=163571]请大家不要用TC来学习C语言,点击此处查看原因[/url]
[url=http://bbs.bc-cn.net/viewthread.php?tid=162918]C++编写的Windows界面游戏[/url]
[url=http://yzfy.org/]C/C++算法习题(OnlineJudge):[/url] http://yzfy.org/
1