声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1613|回复: 6

[C/C++] 程序中不能用浮点数,怎么实现啊?谢谢大家

[复制链接]
发表于 2008-9-16 08:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
比如开方之类的,结果就是浮点数,可程序要求不能有浮点数,全用整型实现,怎么办啊?谢谢大家!:@L
回复
分享到:

使用道具 举报

发表于 2008-9-16 11:13 | 显示全部楼层
算法原理:
1+3+5+...+(2n-1) = n^2
根据公式我们要求X的开方,只需让X-1,X-3,X-5....直到X为负数,这时所有成功的次数就是平方根的整数部分.

  1. public static int sqrt(int x) {

  2.     int l1 = 0, l2 = 3;

  3.     x--;

  4.     while (x >= 0) {

  5.      x -= l2;

  6.      l2 += 2;

  7.      l1++;

  8.     }

  9.     return l1;

  10. }
复制代码
发表于 2008-9-16 11:14 | 显示全部楼层
另一个快一点的方法,牛顿迭代法解方程 x^2=a

  1. public static int sqrt(int x){

  2. if (x <= 0) return 0;         

  3. int l1 = 2;

  4. int l2= 0;  

  5. for (int i = 0; i < 25; i++)      {         

  6.    l1= (l1 + x /l1) / 2;

  7.    if (l2<= l1 && i != 0) break;

  8.    l2 = l1;   

  9. }     

  10. return l1;  

  11. }
复制代码
 楼主| 发表于 2008-9-17 08:32 | 显示全部楼层
谢谢楼上哈,大家还有别的注意么?
发表于 2008-9-17 11:15 | 显示全部楼层
不知道你说的注意是什么意思
 楼主| 发表于 2008-9-17 16:30 | 显示全部楼层
发表于 2008-10-4 09:59 | 显示全部楼层
原帖由 candle-ren 于 2008-9-17 16:30 发表
是主意,哈哈哈


这就只能靠你自己慢慢想了,无非就是上述间接的方法
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-5-12 19:12 , Processed in 0.114183 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表