您的位置:首页 > 其它

nyoj题目101:两点距离

2015-02-04 15:56 309 查看

两点距离

时间限制:3000 ms  |  内存限制:65535 KB

难度:1

描述
输入两点坐标(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

 

#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;

}
 

       

 

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: