关于星期几计算问题 谢谢指点

beiler.dong 2008-11-01 05:16:00
我在计算星期的时候日期经常计算错,但是多次查找不知道错误原因在何处,
希望各位指点一下 计算方法是设定1902年1月6日为起始日 然后用后面的日子减去它算出相差的日子除以七取余后算出星期几



// daytime.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <string.h>
#include <iostream.h>
#include "math.h"

int main(int argc, char* argv[])
{
int d1=1902,d2=1,d3=6,n1=2008,n2=11,n3=1,b1,b2,b3,c3=0;\\日期设定
int i,e;
printf("please write down the day:");
// cin>>n1>>n2>>n3;
if (b1%4==0&&d2==2&&d3>30)
printf("error");
else if(b1%4!=0&&d2==2&&d3>29)
printf("error");
else if(n2>12||n3>31)
printf("error");
else
{
b1=n1-d1;
b2=n2-d2;
b3=n3-d3;


for(i=0;i<b1;i++)
{
if (i%4==0)
c3=c3+366;
else(i%4!=0) ;
c3=c3+365;
}
for (e=0;e<=b2;e++) \\应该是在这的计算出现了差错 具体原因不知道
{
if(n1%4==0)
{
switch(e)
{
case 0 :break;
case 1 :c3=c3+31; break;
case 2 :c3=c3+29; break;
case 3 :c3=c3+31; break;
case 4 :c3=c3+30; break;
case 5 :c3=c3+31; break;
case 6 :c3=c3+30; break;
case 7 :c3=c3+31; break;
case 8 :c3=c3+31; break;
case 9 :c3=c3+30; break;
case 10 :c3=c3+31; break;
case 11 :c3=c3+30; break;
}
}
else(n1%4!=0);
{
switch(e)
{
case 0 :break;
case 1 :c3=c3+31; break;
case 2 :c3=c3+28; break;
case 3 :c3=c3+31; break;
case 4 :c3=c3+30; break;
case 5 :c3=c3+31; break;
case 6 :c3=c3+30; break;
case 7 :c3=c3+31; break;
case 8 :c3=c3+31; break;
case 9 :c3=c3+30; break;
case 10 :c3=c3+31; break;
case 11 :c3=c3+30; break;
}
}



}
c3=c3+b3;
i=c3%7;
switch(i)
{
case 0 :cout<<"星期一"<<endl;break;
case 1 :cout<<"星期二"<<endl;break;
case 2 :cout<<"星期三"<<endl;break;
case 3 :cout<<"星期四"<<endl;break;
case 4 :cout<<"星期五"<<endl;break;
case 5 :cout<<"星期六"<<endl;break;
case 6 :cout<<"星期日"<<endl;break;

}
// c1=b1%4;
// c3=b2;
// if(c1=0)


// cout<<n1<<'/'<<n2<<'/'<<n3<<'\n'<<b1<<'/'<<b2<<'/'<<b3<<'/'<<c3<<endl;
}


}

...全文
152 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
太乙 2008-11-02
  • 打赏
  • 举报
回复
#include <iostream>
#include <string>
using namespace std;
#define BEGINYEAR 1970
#define BEGINMONTH 1
#define BEGINDAY 1
#define BEGINWEEK 4
const string weeks[]={"星期一","星期二","星期三","星期四","星期五","星期六","星期日"};
const int days[] = {31,28,31,30,31,30,31,31,30,31,30,31};
int getDays(int y,int m,int d)//返回y-m-d到begin日期的天数
{
if (y<BEGINYEAR || m<BEGINMONTH || d<BEGINDAY)
{
return -1;
}
int countday=0;
for (int i=BEGINYEAR;i<y;i++)
{
if (i%4==0 && i%100!=0 || i%400==0)//闰年
{
countday+=1;
}
countday+=365;
}
for (int j=0;j<m-1;j++)
{
countday+=days[j];
if (j==1)//第二月
{
countday+=(y%4==0&&y%100!=0||y%400==0)?1:0;
}
}
return countday+d-1;
}
void main()
{
int y,m,d;
cout<<"请输入年月日:";
cin>>y>>m>>d;
cout<<"这是"<<weeks[(getDays(y,m,d)+BEGINWEEK-1)%7]<<endl;
}
太乙 2008-11-02
  • 打赏
  • 举报
回复

晕~~~~~~~


你这
int d1=1970,d2=1,d3=5,n1=2008,n2=10,n3=1,b1,b2,b3,c3=0;
int i,e;
printf("please write down the day:");
if (b1%4==0&&d2==2&&d3>30)
printf("error");
else if(b1%4!=0&&d2==2&&d3>29)
printf("error");
else if(n2>12||n3>31)
printf("error");

这都是啥乱起八遭的?

对b1都没赋初值呢!
d1,d2,d3,n1,n2,n3,b1,b2,b3,c3都是干嘛的??




太乙 2008-11-02
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 dhc566 的回复:]
有人帮忙解决嘛?
[/Quote]



#include <string.h>
#include <iostream.h>
#include <stdio.h>
#include "math.h"

int main(int argc, char* argv[])
{
int d1=1970,d2=1,d3=5,n1=2008,n2=11,n3=1,b1,b2,b3,c3=0;
int i,e;
printf("please write down the day:");
if (b1%4==0&&d2==2&&d3>30)
printf("error");
else if(b1%4!=0&&d2==2&&d3>29)
printf("error");
else if(n2>12||n3>31)
printf("error");
else
{
b1=n1-d1;
b2=n2-d2;
b3=n3-d3;


for(i=0;i <b1;i++)
{
if (i%4==0)
c3=c3+366;
else(i%4!=0) ;
c3=c3+365;
}
for (e=0;e <=b2;e++)
{
if(n1%4==0)
{
switch(e)
{
case 0 :break;
case 1 :c3=c3+31; break;
case 2 :c3=c3+29; break;
case 3 :c3=c3+31; break;
case 4 :c3=c3+30; break;
case 5 :c3=c3+31; break;
case 6 :c3=c3+30; break;
case 7 :c3=c3+31; break;
case 8 :c3=c3+31; break;
case 9 :c3=c3+30; break;
case 10 :c3=c3+31; break;
case 11 :c3=c3+30; break;
}
}
else(n1%4!=0);
{
switch(e)
{
case 0 :break;
case 1 :c3=c3+31; break;
case 2 :c3=c3+28; break;
case 3 :c3=c3+31; break;
case 4 :c3=c3+30; break;
case 5 :c3=c3+31; break;
case 6 :c3=c3+30; break;
case 7 :c3=c3+31; break;
case 8 :c3=c3+31; break;
case 9 :c3=c3+30; break;
case 10 :c3=c3+31; break;
case 11 :c3=c3+30; break;
}
}



}
c3=c3+b3;
i=c3%7;
switch(i)
{
case 0 :cout <<"星期一" <<endl;break;
case 1 :cout <<"星期二" <<endl;break;
case 2 :cout <<"星期三" <<endl;break;
case 3 :cout <<"星期四" <<endl;break;
case 4 :cout <<"星期五" <<endl;break;
case 5 :cout <<"星期六" <<endl;break;
case 6 :cout <<"星期日" <<endl;break;

}

}


}
----------------------------------

output:

please write down the day:星期六
Press any key to continue












beiler.dong 2008-11-02
  • 打赏
  • 举报
回复
有人帮忙解决嘛?
beiler.dong 2008-11-01
  • 打赏
  • 举报
回复
不好使啊 星期几还是有问题
太乙 2008-11-01
  • 打赏
  • 举报
回复

#include <string.h>
#include <iostream.h>
#include <stdio.h>
#include "math.h"

int main(int argc, char* argv[])
{
int d1=1970,d2=1,d3=5,n1=2008,n2=11,n3=1,b1,b2,b3,c3=0;
int i,e;
printf("please write down the day:");
if (b1%4==0&&d2==2&&d3>30)
printf("error");
else if(b1%4!=0&&d2==2&&d3>29)
printf("error");
else if(n2>12||n3>31)
printf("error");
else
{
b1=n1-d1;
b2=n2-d2;
b3=n3-d3;


for(i=0;i <b1;i++)
{
if (i%4==0)
c3=c3+366;
else(i%4!=0) ;
c3=c3+365;
}
for (e=0;e <=b2;e++)
{
if(n1%4==0)
{
switch(e)
{
case 0 :break;
case 1 :c3=c3+31; break;
case 2 :c3=c3+29; break;
case 3 :c3=c3+31; break;
case 4 :c3=c3+30; break;
case 5 :c3=c3+31; break;
case 6 :c3=c3+30; break;
case 7 :c3=c3+31; break;
case 8 :c3=c3+31; break;
case 9 :c3=c3+30; break;
case 10 :c3=c3+31; break;
case 11 :c3=c3+30; break;
}
}
else(n1%4!=0);
{
switch(e)
{
case 0 :break;
case 1 :c3=c3+31; break;
case 2 :c3=c3+28; break;
case 3 :c3=c3+31; break;
case 4 :c3=c3+30; break;
case 5 :c3=c3+31; break;
case 6 :c3=c3+30; break;
case 7 :c3=c3+31; break;
case 8 :c3=c3+31; break;
case 9 :c3=c3+30; break;
case 10 :c3=c3+31; break;
case 11 :c3=c3+30; break;
}
}



}
c3=c3+b3;
i=c3%7;
switch(i)
{
case 0 :cout <<"星期一" <<endl;break;
case 1 :cout <<"星期二" <<endl;break;
case 2 :cout <<"星期三" <<endl;break;
case 3 :cout <<"星期四" <<endl;break;
case 4 :cout <<"星期五" <<endl;break;
case 5 :cout <<"星期六" <<endl;break;
case 6 :cout <<"星期日" <<endl;break;

}

}


}

没问题啊!

1902年1-6我不知道周几,但是改改起始时间1970-1-5就好使!

65,208

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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