两点距离
-
描述
-
输入两点坐标(X1,Y1),(X2,Y2)(0<=x1,x2,y1,y2<=1000),计算并输出两点间的距离。
-
输入
-
第一行输入一个整数n(0<n<=1000),表示有n组测试数据;
随后每组占一行,由4个实数组成,分别表示x1,y1,x2,y2,数据之间用空格隔开。
输出
- 对于每组输入数据,输出一行,结果保留两位小数。 样例输入
-
2 0 0 0 1 0 1 1 0
样例输出
-
1.00 1.41
-
第一行输入一个整数n(0<n<=1000),表示有n组测试数据;
#include <stdio.h>
#include <math.h>
int main ()
{
int n;
float x1, x2, y1, y2;
float s;
scanf ("%d", &n);
while (n--)
{
scanf ("%f %f %f %f", &x1, &y1, &x2, &y2);
s = sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
printf ("%.2f\n", s);
}
return 0;
}
这道题一遍过的,但是有一点想不通。float 与 doble 的运行快慢问题
float占得内存小快一些,但是这道题 用float为4s而double为0s. 不懂了。
自己百度了一下,有人说所有的float运算要转化为double。但有人说不需要转化,不明白。
优秀代码:
#include<iostream>
#include<math.h>
#include<iomanip>
using namespace std;
int main()
{
/*freopen("1.txt","r",stdin);
freopen("2.txt","w",stdout);*/
double x1,x2,y1,y2,m;
double a;
cin>>m;
while(m--)
{
cin>>x1>>y1>>x2>>y2;
a=sqrt((double)((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)));
cout.setf(ios::fixed);
cout<<setprecision(2)<<a<<endl;
}
return 0;
}