{算法竞赛入门经典}第二章 如何判断整数

 

/*Date : 2010 - 4- 15*/

 

例题2-1  输出所有形如aabb的四位完全平方数(即前两位数字相等,后两位数字也相等)

 

 

 一.思路1: 

 

     该题的大体思路是十分清晰的,即" 循环 + if "的搭档进行筛选.  

     具体点说就是通过2重循环将所有aabb数列举出来,再通过if来筛选出是完全平方数的数. 

 

 

 

 

 

 实现:

 

 这里提到了一个常用的功能实现: 如何判断一个数是否是整数的问题.

 原始的思路是利用floor(x)来取x的整数部分,再与x相比较,如果二者相等,则x是整数,反之则不是.

 

 这里需要注意的一个问题是float型数据的精度问题,在大量计算中,由于float型对于

 无限小数的运算也是属于近似运算,所以存在一定的误差,很容易出现的问题是:原本结果是1的,

 得出的结果却是0.999999999.然而floor之后却变成了0,显然这是不正确的.因此需要处理这

 种由精度引起的误差问题.

 

 书中给出的方法是+0.5.这样就能很巧妙地避开上述的错误.原因如下:

 i) 当x是整数时,加上0.5后变成x.5,再用floor处理后,仍然是x.可判断相等

 ii)当x是小数时,加上0.5后再经过floor后变成整数,可判断不相等

 iii)当x是类似于0.99999999的小数时,加上0.5后经过floor变成1,可判断相等

 

 这里需要指出的一点是if判定相等的问题.当比较0.9999999与1时,会判定不相等.

 当比较0.9999999与1时,会判定相等.(编译器是MinGW3.4.5) 

 

 即判断一个数x是否是整数的表达式: if(floor(x + 0.5) == x)

 

 

 

二.思路2

         前面的思路是先将aabb形式的数列举出来,再用完全平方这个条件筛选.当然,我们

         也可以先将一些数的完全平方计算出来,再判断是不是aabb型的数.

                        二者顺序不同,结果一样.

 

 

 

 

 

   这段代码用到了我们平常编程比较少用到的continue语句,由continue和break组成的判断

   组合可以做类似的定界判断.也可以好好体会下这种用法.

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值