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