1

我正在尝试解决编程竞赛系统上的一些问题并解决 2 点距离问题,我不明白为什么我的代码在所有提交中排名 1181º。

我怎样才能让我的代码比现在快?

#include <stdio.h>
#include <math.h>

int main(){
    register unsigned int x1,x2,y1,y2;
    scanf("%i %i %i %i", &x1,&y1,&x2,&y2);
    printf("%.4f", sqrt(pow(x2-x1,2) + pow(y2-y1, 2)));
}
4

2 回答 2

5

如果您避免使用pow(),那么您不仅可以避免在 (x2-x1) 自身相乘时不必要的函数调用(它可能会或可能不会得到优化——我不确定),而且您可以延迟转换为浮点值,直到只有一个,到sqrt()

如果您的实际问题涉及读取不止一行输入(并假设在您的示例中读取整数),我怀疑性能上的最大差异将是放弃scanf()使用编写良好的自定义函数,例如,fread()stdin.

于 2013-07-11T18:32:04.433 回答
0

您可以摆脱一些多余的函数调用,也可以避免 int->float 转换:

#include <stdio.h>
#include <math.h>

int main(){
    double x1,x2,y1,y2;
    scanf("%lf %lf %lf %lf", &x1,&y1,&x2,&y2);
    printf("%.4f\n", sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)));
    return 0;
}
于 2013-07-11T18:23:59.053 回答