雪之精灵

从吐丝结茧到破茧而出

把自1970年1月1日以来的秒数转化成年月日

#include <iostream>
using namespace std;

bool IsRound(int year){
 if((year%100)&&(year%4==0)) return 1;
 if((year%100==0)&&(year%400==0)) return 1;
 return 0;
}
int main() {
 int n;
 int year_s[2]= {365*24*60*60, 366*24*60*60};
 int month_s[2][12]={{31,28,31,30,31,30,31,31,30,31,30,31},
   {31,29,31,30,31,30,31,31,30,31,30,31}};
 int day_s = 24*60*60;
 int hour_s = 60*60;
 int minute_s = 60;

 

 while(cin>>n){
    int temp = n;
    int year=1970;
         int month=1;
         int day=1;
         int hour=0;
         int minute=0;
         int second=0;

    while(temp>=60){

     int flag= IsRound(year);
     if(temp>=year_s[flag]) { year++; temp-=year_s[flag]; }
     else if(temp>=day_s){
      int days = temp/day_s;
      temp=temp%day_s;
      int i=0;
      int flag = IsRound(year);
      int hh=31;
      while(days>=hh){
       days-=month_s[flag][i++];
       hh=month_s[flag][i];
       }
      month+= i;
      day+=days;

     }else if(temp>=hour_s){
          hour=temp/hour_s;
          temp%=hour_s;
     }else if(temp>=minute_s){
           minute = temp/minute_s;
           temp%=minute_s;
     }
     }
     second = temp;

        cout<<year<<"-";
      if(month/10==0) cout<<"0";
      cout<<month<<"-";
      if(day/10==0) cout<<"0";
      cout<<day<<" ";
      if(hour/10==0) cout<<"0";
      cout<<hour<<":";
      if(minute/10==0) cout<<"0";
      cout<<minute<<":";
      if(second/10==0) cout<<"0";
      cout<<second<<endl;
 }


 return 0;
}

posted on 2010-05-29 13:54 雪之精灵 阅读(2159) 评论(0)  编辑 收藏 引用 所属分类: c++算法


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理