{
int nyear,nmonth,nday, gyear,gmonth,gday;
long int Ndata,c;
int wei=11,mt,nwhatday=0,runday,runmonth,nm,i,a,whatChunJie,ChunJieYear,zgwhatday,gyday,ms,cz,runt;
char YNrun;
system("cls");
cout<<"輸入需查詢的農歷年月日(例:2005 05 25)"<<endl;
cin>>nyear;
cin>>nmonth;
cin>>nday;
if(judge(gyear,gmonth,gday)==0){
cout<<"error date"<<endl;
return;
}
runday=(NongliData[nyear-1899]/0x1000)%0x10; //取出判斷閏月天數的值
runmonth=(NongliData[nyear-1899]/0x100)%0x10; //取出判斷是否閏月閏幾月的值
if(runday==1) runt=30;
else runt=29;
if(YNrun=='y')
nm=nmonth; //計算該月前面有幾個月
else nm=nmonth-1;//計算在該農歷年的第幾天
Ndata=NongliData[nyear-1899];
c=Ndata/0x10000;
wei=11;
while(wei>=0 && nm>0){
i=c>>wei&~(~0<<1);
if(i==1) mt=30;
else mt=29;
nwhatday=nwhatday+mt;
nm--;
wei--;
}
if(nmonth>runmonth && runmonth!=0){
nwhatday=nwhatday+runt;
}
nwhatday=nwhatday+nday;//計算該年春節在公歷年的第幾天
ChunJieYear=NongliData[nyear-1899];
a=ChunJieYear%0x100;
whatChunJie=gPastday[a/100]+a%100;
if((ChunJieYear%4==0 && ChunJieYear%100!=0 || ChunJieYear%400==0) && (a/100>2)) whatChunJie++;
zgwhatday=nwhatday+whatChunJie-1;//計算該公歷年壹年總天數
if(nyear%4==0 && nyear%100!=0 || nyear%400==0){
gyday=366;
months[2]=29;
}
else{
gyday=365;
months[2]=28;
}
//換算出公歷年份
if(zgwhatday>gyday){
gyear=nyear+1;
zgwhatday=zgwhatday-gyday;
}
else gyear=nyear;
//換算出公歷月份
ms=1;
cz=zgwhatday;
gmonth=0;
while(ms<13){
cz=cz-months[ms];
if(cz<=0) {
gmonth++;
gday=cz+months[ms];
break;
}
gmonth++;
ms++;
}
cout<<endl<<"由農歷轉換成公歷查詢結果如下"<<endl<<endl;
cout<<"農歷:"<< nyear<<"年"<<nmonth<<"月"<<nday<<"日"<<endl;
cout<<endl<<"公歷: (公元)"<<gyear<<"年"<<gmonth<<"月"<<gday<<"日"<<endl;
getch();
}