求助abs `#include[HTML_REMOVED]
include[HTML_REMOVED]
define ll long long
using namespace std;
int q;ll r;
const int y4b=3653+366;
const int y40b=400365+100;
const int y4a=400*365+97;
int py[15]={0,31,28,31,30,31,30,31,31,30,31,30,31};
define abs(x) x>0?x:-x
bool judge(int year){
if((abs(year)-1)%4==0) return 1;
else return 0;
}
bool Judge(int year){
if(year%4==0&&year%100!=0||year%400==0) return 1;
return 0;
}
void solveBC(ll r){
int day=1,month=1,year=-4713;
int add=r/y40b;r%=y40b;
year+=400add;
add=r/y4b;r%=y4b;
year+=4add;
while(r>=366){
bool flag=judge(year);
if(flag) year,r-=366;
else year,r-=365;
}
if(year>=0) r+=365;
while(r){
if(judge(year)) py[2]=29;
else py[2]=28;
if(r>=py[month]){
r-=py[month];
if(month==13) year,month=1;
}
else
day+=r,r=0;
}
if(year<0)printf(“%d %d %d BC\n”,day,month,-year);
else printf(“%d %d %d\n”,day,month,year);
}
void solveAD(ll r){
r-=2299161;
int day=15,month=10,year=1582;
int add=r/y4a;r%=y4a;
year+=400*add;
while(r>=366){
bool flag=Judge(year+1);
if(flag) year,r-=366;
else year,r-=365;
}
while(r){
if(Judge(year)) py[2]=29;
else py[2]=28;
if(r>=py[month]){
r-=py[month];
if(month==13) year,month=1;
}
else
day+=r,r=0;
}
if(day>py[month]){
day-=py[month];
if(month==13) year,month=1;
}
printf(“%d %d %d\n”,day,month,year);
}
void solve(ll r){
if(r<2299161) solveBC(r);
else solveAD(r);
}
int main(){
scanf(“%d”,&q);
while(q–){
scanf(“%lld”,&r);
solve(r);
}
return 0;
}`
在这段代码中,abs用define手写可过,用cmath库中的过不了,求助