計算アルゴリズム【Ⅱ】at TECH
計算アルゴリズム【Ⅱ】 - 暇つぶし2ch610:595
08/01/02 20:39:23
「1にちずつ遡りながら日付を表示」とかやるとbefore()の処理量が馬鹿にならないので、
>>601に載ってるのを参考に書き換えてみました
/* 西暦1年1月0日からの経過日数から、日付を求める */
Date make_date(int n)
{
 int y=(n+305)/146097*400
    +(n+305)%146097/36524*100
    +(n+305)%146097%36524/1461*4
    +(n+305)%146097%36524%1461/365;
 int diff=n-(365*(y-1)+y/4-y/100+y/400+31+28); // 3月0日からの経過日数
 if(diff==0){    //2月29日
  diff=366;
  y--;
 }
 int m;
 for(m=3;;m++){
  //3月0日からm月0日までの経過日数, 30*(m-3)+3*(m+1)/5-2 の変形
  if(153*(m+1)/5-122<diff && diff<=153*(m+2)/5-122){ 
   break;
  }
 }
 int d=diff-(153*(m+1)/5-122);
 if(m>12){
  m-=12;
  y++;
 }
 Date x={y,m,d};
 return x;
}


次ページ
続きを表示
1を表示
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch