不使用已有函数求出一个数的平方根
程序员文章站
2024-01-22 13:59:58
...
前一段时间领导出了一道算法题(找出一个数的平方根,精确到小数点后两位,不使用函数库),对此一直耿耿于怀,始终觉得自己的答案是有问题的,但是暂时没有想到其他好的办法。
我是先求出最接近这个数的一个能够整除的平方根,比如说1的平方根是1,2的最接近的平方根也是1,3的最接*方根也是1,而5的最接近的平方跟是2,那么以2为基数,每次叠加0.01,加入说root是平方根,那么找出root 乘以root,然后乘积比该数大0.001的数。具体算法见以下代码:
import java.math.BigDecimal; import java.math.RoundingMode; /** * 找出一个数的平方根,精确到小数点后两位,不使用函数库. * * @author qinge * */ public class Square { public static void main(String[] args) { for (int num = 1; num <= 1000; num++) { System.out.print(num + "的函数平方根:" + Math.sqrt(num)); double root = findSmallRoot(num); System.out.print(" 小数点前一位是:" + root); while (true) { double product = root * root; if (product == num) { System.out.print(" 计算得出平方根是:" + root + "\n"); break; } else if (product > num) {// 此处算法有遗漏 if (product - num > 0.001) { System.out.print(" 计算得出平方根是:" + root + "\n"); break; } } // 用加0.01进行控制 root = root + 0.01; // 对double类型进行精度控制 root = BigDecimal.valueOf(root).setScale(2, RoundingMode.HALF_UP).doubleValue(); } } } /** * 找出num的平方根的小数点前面的数字 * * @param num * @return */ public static int findSmallRoot(int num) { // 遍历平方根的基数,基数的乘机必然会小于等于num for (int i = 1; i <= num && i * i <= num; i++) { // 找出基数则返回 if (i * i == num) { return i; } } // 找num-1 return findSmallRoot(num - 1); } }
相信一些大牛们一定有自己更神奇的算法,那么就贴出来吧!学习膜拜中...
上一篇: 超详细hadoop集群服务器安装配置教程
下一篇: php图片保存、上载
推荐阅读
-
不使用已有函数求出一个数的平方根
-
c语言:sizeof的使用,其不是函数,是一个操作符关键字,定义一个数组arr,输出arr和&arr的区别
-
react(58)——使用路由的时候虽然不展示所有的路由,但是会一开始就加载所有的路由组件,使用Suspense组件和lazy函数进行解决
-
c语言:sizeof的使用,其不是函数,是一个操作符关键字,定义一个数组arr,输出arr和&arr的区别
-
php递归地使用后面数组的值替换第一个数组的值函数array_replace_recursive()
-
php array_replace 函数使用传递的数组替换第一个数组的元素
-
php递归地使用后面数组的值替换第一个数组的值函数array_replace_recursive()
-
php array_replace 函数使用传递的数组替换第一个数组的元素
-
输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。要求用3个函数实现,分别为输入10个数、进行处理、输出10个数。要求使用指针的方法进行处理。
-
(使用指针)输入是个整数,将最小的数与第一个数对换,最大的数和最后一个数对换 使用三个函数实现 1、输入十个数 2、进行处理 3、输出十个数