当我试图解决问题POJ1269-相交线时,我感到困惑。以下是链接:http://poj.org/problem?id=1269这是我最后的AC代码:
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <cstring>
#include <algorithm>
using namespace std;
int main(){
int n;
double x,y,xt,yt,xxt,yyt,xx,yy;
cin >> n;
printf("INTERSECTING LINES OUTPUT\n");
while(n --){
cin >> x >> y >> xt >> yt >> xx >> yy >> xxt >> yyt;
if((yt-y)*(xxt-xx) == (yyt-yy)*(xt-x)){
if((yt-y)*(xt-xx) == (yt-yy)*(xt-x)){
printf("LINE\n");
}
else{
printf("NONE\n");
}
}
else{
double X = ((x-xt)*(xx*yyt-xxt*yy) - (xx-xxt)*(x*yt-xt*y))
/ ((y-yt)*(xx-xxt) - (x-xt)*(yy-yyt));
double Y = ((y-yt)*(xx*yyt-xxt*yy) - (yy-yyt)*(x*yt-xt*y))
/ ((y-yt)*(xx-xxt) - (x-xt)*(yy-yyt));
printf("POINT %.2f %.2f\n", fabs(X) < 0.005 ? 0 : X,fabs(Y) < 0.005 ? 0 : Y);
}
}
printf("END OF OUTPUT\n");
return 0;
}
在最开始的时候,我用“.2lf”来输出X和Y,但是结果是错误的答案。我把X和Y定义为双浮点数,所以我想我应该用“.2lf”,但是我把它改为“.2f”之后我得到了AC。为什么会发生这种事?或者我的代码哪里错了?
我把X和Y定义为双浮点数,所以我想我应该用“.2lf”
取决于语言版本。C++03和更早版本继承的C标准库函数来自C89,其中使用LF格式说明符会导致未定义的行为。
由于C++11继承了C99标准,因此允许在printf中使用lf,其行为与使用f相同。