毕达哥拉斯三元组代码中if(c == (int)c)判断的作用是什么?
if(c == (int)c)判断语句的工作原理 这段代码的逻辑是遍历1~30的正整数a、b作为直角边,计算斜边c的取值,筛选出符合要求的毕达哥拉斯三元组(三个边长均为正整数)输出,该if语句是核心筛选逻辑,工作原理如下:
- 变量
c是float类型,存储sqrt(a*a + b*b)的计算结果,也就是直角三角形斜边的长度。 (int)c是C语言的强制类型转换操作,作用是直接截断浮点数c的小数部分,只保留整数部分返回整数值。比如c = 5.0时(int)c结果为5,c=5.6时(int)c结果为5,c=4.999时(int)c结果为4。- 判断
c == (int)c时,运算符两边类型不同,右侧的int类型值会被隐式转换为float类型再做相等比较:- 如果
c本身就是整数(比如5.0),(int)c得到的5隐式转float为5.0,和原c相等,条件成立,说明当前a、b对应的斜边是整数,属于毕达哥拉斯三元组,可以输出。 - 如果
c不是整数(比如5.2),(int)c得到的5隐式转float为5.0,和原c不相等,条件不成立,直接跳过。
- 如果
补充说明:该判断本质是校验浮点数c是否为整数值,不过实现存在浮点数精度风险,当a、b取值很大时,sqrt计算可能出现精度误差,比如本该是整数的结果被计算为
5.0000001或者4.9999999,导致判断错误,但在本题a、b最大为30的小数值场景下不会出现问题。
内容的提问来源于stack exchange,提问作者bitcoder
相关产品推荐
相关产品推荐

