一个SX问我的,我就写了写......从2010.1.1开始,给了一组测试数据3的话输出2010.1.4星期1,所以说2010.1.1是星期五,总星期就是
(day+5)%7==0?7:(day+5)%7
下面是代码......
#include <iostream> #include <stdlib.h> using namespace std;int month[] = {31,28,31,30,31,30,31,31,30,31,30,31}; int myDay[1100];bool isRunYear(int year) {if((year%4==0&&year%100!=0)||year%400==0)return true;return false; }int main() {int i,j,k,t=0;int day;cin>>day;int sumDay = 0;//先算到3000年,每年离得天数 for(i=2010;i<3000;i++){//sumDay = 0;不可清零 bool flag = isRunYear(i);if(flag)sumDay += 366;elsesumDay += 355;myDay[t++] = sumDay;}for(i=0; i<t;i++){if(myDay[i]>day)break;} int year = i+2010;//算月份 int leftDay;if(i==0)leftDay = day;elseleftDay = day-myDay[i-1]; bool flag = isRunYear(year);int sum = 0;if(flag)month[1] = 29;int monthDay=0;int finalDay;for(j=0;j<12;j++){//感觉这一句比较妙 sum += month[j];//if(leftDay<=sum)// break; if(leftDay<sum){monthDay = j+1;//最后加一是因为 1月1日开始不是1月0日 finalDay = leftDay - (sum-month[j])+1;break;}else //31天的时候应该是2月1号 if(leftDay==sum) {monthDay=j+2;finalDay = 1;break;}}int xingqi = (day+5)%7==0?7:(day+5)%7;cout<<"第"<<day<<"天后是:"<<year<<"年"<<monthDay<<"月"<<finalDay<<"号"<<"星期"<<xingqi<<endl; system("pause");return 0; }