1033:计算线段长度
时间限制: 1000 ms 内存限制: 32768 KB
提交数: 26400 通过数: 14848
【题目描述】
已知线段的两个端点的坐标A(Xa,Ya)A(Xa,Ya),B(Xb,Yb)B(Xb,Yb),求线段ABAB的长度,保留到小数点后33位。
【输入】
第一行是两个实数Xa,YaXa,Ya,即AA的坐标。
第二行是两个实数Xb,YbXb,Yb,即BB的坐标。
输入中所有实数的绝对值均不超过1000010000。
【输出】
一个实数,即线段ABAB的长度,保留到小数点后33位。
【输入样例】
1 1
2 2
【输出样例】
1.414
【来源】
通过OJ:
#include<iostream>
#include<iomanip>
#include<cmath>
using namespace std;
int main()
{
double Xa,Xb,Ya,Yb;
double len;
cin>>Xa>>Ya;
cin>>Xb>>Yb;
len=sqrt( (Xa-Xb)*(Xa-Xb) + (Ya-Yb)*(Ya-Yb) );
cout<<setiosflags(ios::fixed)<<setprecision(3);
cout<<len<<endl;
return 0;
}
可是, 这个为什么这个会报错呢?
很有可能是数据类型的问题!
信息学奥赛一本通,通常用 double 能解决, 但是float不能...
#include <iostream>
using namespace std;
#include <iomanip>
#include <cmath>
int main(int argc, char** argv)
{
float x1, y1, x2, y2, length;
cin >> x1 >> y1;
cin >> x2 >> y2;
length = sqrt(pow((x1- x2), 2) + pow((y1- y2), 2));
cout << setiosflags(ios::fixed) << setprecision(3) << length ;
return 0;
}