从某一日期开始过day天的日期

  一个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;
        else
            sumDay += 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;
    else
        leftDay = 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;
}

     

 

posted @ 2014-12-11 19:16  加拿大小哥哥  阅读(506)  评论(0编辑  收藏  举报