如何快速获得此C代码?

时间:2013-07-11 18:14:05

标签: c

我正在尝试解决编程竞赛系统中的一些问题 解决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)));
}

2 个答案:

答案 0 :(得分:5)

如果你避免使用pow(),你不仅要避免一个函数调用,如果你自己乘以(x2-x1)(可能会或可能不会被优化出来 - 我不确定) ,但你可以延迟转换为浮点值,直到只有一个,到sqrt()

如果您的实际问题涉及阅读不仅仅是一行输入(并假设整数读取如您的示例),我怀疑性能的最大差异将是放弃scanf()而不是例如,使用来自fread()的{​​{1}}来编写自定义函数。

答案 1 :(得分:0)

您可以摆脱一些冗余函数调用,也可以避免int-&gt; 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;
}