社区
C语言
帖子详情
if求解释
l369294289
2011-11-24 10:28:25
if(b*b-4*a*c > 0) 和 if(b*b > 4*a*c)有什么不同,为什么在oj上写成前一种能过,写成后一种就WA了?
...全文
325
25
打赏
收藏
if求解释
if(b*b-4*a*c > 0) 和 if(b*b > 4*a*c)有什么不同,为什么在oj上写成前一种能过,写成后一种就WA了?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
25 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
l369294289
2011-11-25
打赏
举报
回复
[Quote=引用 21 楼 pengzhixi 的回复:]
引用 19 楼 l369294289 的回复:
引用 18 楼 pengzhixi 的回复:
前面一个可能会超出Int的表示范围,比如4*a*c是一个绝对值很大的负数,b*b也是一个很大的正数,那么b*b-4*a*c那么就可能非常的的正数超出int的表示范围。
呵呵~好吧~我发现我真的好笨额~
额,这个属于一些细节东西,不是笨不笨的问题,一般很少会注意到而已。
[/Quote]
其实,做OJ上的题,特别是简单题,一般都要考虑到有卡数据的情况,这么明显我却没想到,确实是我二了。
l369294289
2011-11-25
打赏
举报
回复
[Quote=引用 20 楼 pengzhixi 的回复:]
当上溢的时候那么可能就会得到一个负数,那么b*b-4*a*c>0就得到相反的结论。
[/Quote]
恩恩,以后有什么问题还请大侠多多指教~
pengzhixi
2011-11-25
打赏
举报
回复
[Quote=引用 19 楼 l369294289 的回复:]
引用 18 楼 pengzhixi 的回复:
前面一个可能会超出Int的表示范围,比如4*a*c是一个绝对值很大的负数,b*b也是一个很大的正数,那么b*b-4*a*c那么就可能非常的的正数超出int的表示范围。
呵呵~好吧~我发现我真的好笨额~
[/Quote]
额,这个属于一些细节东西,不是笨不笨的问题,一般很少会注意到而已。
pengzhixi
2011-11-25
打赏
举报
回复
当上溢的时候那么可能就会得到一个负数,那么b*b-4*a*c>0就得到相反的结论。
l369294289
2011-11-25
打赏
举报
回复
[Quote=引用 18 楼 pengzhixi 的回复:]
前面一个可能会超出Int的表示范围,比如4*a*c是一个绝对值很大的负数,b*b也是一个很大的正数,那么b*b-4*a*c那么就可能非常的的正数超出int的表示范围。
[/Quote]
呵呵~好吧~我发现我真的好笨额~
pengzhixi
2011-11-25
打赏
举报
回复
前面一个可能会超出Int的表示范围,比如4*a*c是一个绝对值很大的负数,b*b也是一个很大的正数,那么b*b-4*a*c那么就可能非常的的正数超出int的表示范围。
l369294289
2011-11-25
打赏
举报
回复
[Quote=引用 16 楼 pengzhixi 的回复:]
你这不就是因为这个可能性引起的。size()返回的应该就是unsigned int 两者相减的话,即使小的减大的 就会出现问题,比如2-4结果肯定是大于1的。
[/Quote]
恩恩~发现了额~我书都白看了~谢谢~
但是这一个if(b*b-4*a*c > 0) 和 if(b*b > 4*a*c)有什么不同?a,b,c都是我定义的int型。
pengzhixi
2011-11-25
打赏
举报
回复
你这不就是因为这个可能性引起的。size()返回的应该就是unsigned int 两者相减的话,即使小的减大的 就会出现问题,比如2-4结果肯定是大于1的。
l369294289
2011-11-25
打赏
举报
回复
[Quote=引用 9 楼 anyidan 的回复:]
引用 6 楼 pengzhixi 的回复:
因为如果两个unsigned相减或者 一个Int,一个unsigned相减得到的结果永远大于0
应该是 前一种不能过,写成后一种就能过了
前一种可能溢出
[/Quote]
我之前也觉得while ( big.size () > sml.size () + 1 )这种会溢出,但是这种可以AC,改成后面一种就会WA
l369294289
2011-11-25
打赏
举报
回复
[Quote=引用 8 楼 keiy 的回复:]
如果都是int的话,看不出有什么区别
从汇编角度,前者只是多用了个减法运算
[/Quote]
呵呵~我们都这么认为~学长称这是人品题。哈哈~
l369294289
2011-11-25
打赏
举报
回复
[Quote=引用 6 楼 pengzhixi 的回复:]
因为如果两个unsigned相减或者 一个Int,一个unsigned相减得到的结果永远大于0
[/Quote]
这个我知道,可是不是因为这个引起的。我也不知道为什么。求大侠解释
http://www.miyub.com/2011/11/11/a-b-1-%e4%b8%8e-a-b-1-uva-10107-what-is-the-median.htm
lancerEx
2011-11-25
打赏
举报
回复
[Quote=引用 9 楼 anyidan 的回复:]
引用 6 楼 pengzhixi 的回复:
因为如果两个unsigned相减或者 一个Int,一个unsigned相减得到的结果永远大于0
应该是 前一种不能过,写成后一种就能过了
前一种可能溢出
[/Quote]
我也觉得应该是这样,LZ是不是写错了
刀刀亮
2011-11-25
打赏
举报
回复
[Quote=引用 8 楼 keiy 的回复:]
如果都是int的话,看不出有什么区别
从汇编角度,前者只是多用了个减法运算
[/Quote]
牛人思考层面就是不一样
w28050
2011-11-25
打赏
举报
回复
好吧,说实话,这题我不会,不解释。
槑党--一缕风
2011-11-25
打赏
举报
回复
说实话,这题我不会,不解释。
子牙河畔
2011-11-25
打赏
举报
回复
区别不大,主要是你使用的软件的问题,你用别的软件试试就知道了。
AnYidan
2011-11-24
打赏
举报
回复
[Quote=引用 6 楼 pengzhixi 的回复:]
因为如果两个unsigned相减或者 一个Int,一个unsigned相减得到的结果永远大于0
[/Quote]
应该是 前一种
不
能过,写成后一种就
能过
了
前一种可能溢出
柯本
2011-11-24
打赏
举报
回复
如果都是int的话,看不出有什么区别
从汇编角度,前者只是多用了个减法运算
走在路上的人吧
2011-11-24
打赏
举报
回复
[Quote=引用 6 楼 pengzhixi 的回复:]
因为如果两个unsigned相减或者 一个Int,一个unsigned相减得到的结果永远大于0
[/Quote]
++
pengzhixi
2011-11-24
打赏
举报
回复
因为如果两个unsigned相减或者 一个Int,一个unsigned相减得到的结果永远大于0
加载更多回复(5)
if用法
求
绝对值c语言,用位运算实现
求
绝对值-有效避开if-else判断
本文介绍了一种利用位操作而非传统的if-else结构来
求
绝对值的方法,这种方法尤其适用于需要高性能处理的应用场景,如3D游戏软件等。文章详细
解释
了针对float和int类型数据的具体实现过程。
用位运算实现
求
绝对值-有效避开if-else判断
本文介绍了一种利用位操作而非传统的if-else结构来
求
绝对值的方法,这种方法尤其适用于需要高性能处理的应用场景,如3D游戏软件等。文章详细
解释
了针对float和int类型数据的具体实现过程。
C语言:If 语句实现的分支语句
本文通过实例展示了如何使用C语言的If语句实现单分支和双分支结构。内容包括
求
三角形面积、判断被3或5整除的数,并详细
解释
了If语句的使用规则,如单句可不加花括号,语句组需加花括号。同时,作者提到了在C语言中算术表达式的中括号不能与数组的中括号混淆。
【郝斌 C语言 笔记】if举例
这篇博客通过三个实例——
求
分数等级、互换数字及三数排序,详细讲解了C语言中if条件语句的实际运用。Q1探讨了根据分数划分等级的逻辑;Q2展示了无额外变量交换两个数字的方法;Q3
解释
了如何用if实现三个数字的降序排列。
第三天:基本if语句的学习。
本文介绍了if语句的基本用法,包括单层和嵌套条件判断。通过两个示例,展示了如何利用if语句
求
一个数的绝对值以及根据考试成绩输出相应的等级。示例代码清晰地
解释
了条件表达式的运用和逻辑判断的过程。
C语言
70,038
社区成员
243,247
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章