原文链接: https://MP.weixin.QQ.com/s/H2E Y2 BI 5K CTB C15 F9 M 9K毫克
今天来看看这个问题吧。 java是如何实现打开根的运算的? 众所周知,java、c、python等有直接的函数,但面试官在这个时候会亲手撕掉源代码。 这个时候该怎么办? 来吧,别慌。
如果一个数字正好能把根号加在两个整数上,例如1,4,9等,就很容易了。
如果一个数字不能正好给两个整数加根号,而且必须保持几个精度,例如2、3、5等,该怎么办?
首先,可以将这个数字分为整数部分和小数部分,分别进行计算。
例如,根据编号52.236,计算出整数部分为2后,可以通过留下几位数的精度来计算小数部分。 按顺序计算10分位、100分位、千分位等,将整数位设为10分位100分位千分位。 结果是我们期望的结果。
我来看代码
导入日本航空(import );
公共类测试6
publicstaticvoidmain (字符串[ ]数组) {
system.out.println (匹配项(5);
system.out.println (匹配方程(5,6 );
}
//需要开根号的数据
//应保持的精度,即小数位
公共建筑(英寸,英寸) {
双精度=新双精度;
if(m0) {2}
ARR=sc(m (米;
}
ints=sq(n;
企业资源(n,s,arr );
}
//*
* *计算保留多少位数的小数
* @param m
* * @返回
*/
公共静态双精度(intm ) {
双精度=新双精度;
整数=0;
wile (编号!=m ({2}
双f=1;
for (英制=0; I=数字; I ) {2}
f=f*10;
}
arr=1/f;
数字;
}
返回区域;
}
//*
* *整数位计算
* @param n
* * @返回
*/
公共卫生组织(Intn ) {
if(n==1) {
返回1;
}
int tmp=0;
for (英寸=1; i=n/2 1; I ) {2}
if(I*I==n ) {
tmp=i;
布莱克;
}
if(I*In ) {
tmp=i-1;
布莱克;
}
}
返回提示;
}
//*
开根号
* @param n
* @param j
* @param arr
* * @返回
*/
公共库存管理系统(英特尔、双向j、双向) {
双精度tmp=j;
for (输入=0; Parr .长度; p ) {2}
if(P0) {2}
j=tmp; //计算后的值(整数位数的小数点以后的和代入j,以下继续运算) ) ) ) ) ) )。
}
for (英寸=1; i=9; I ) ) /小数点后的位数只有9位(0.1、0.2、0.3、0.4、0.5、0.6、0.7、0.8和0.9 )。
tmp=I * arr;j; //i*arr[p]相当于每次加0.1,0.2 .
if(tmp*tmp==n ) {
返回提示;
}
if(tmp*tmpn ) {
//注意不要失去精度
bigdecimal C1=新bigdecimal (双精度.双精度) tmp );
bigdecimal C2=新bigdecimal (双精度.双精度) ARR[p] );
tmp=C1 .子轨迹(C2 ) .双精度值);
布莱克;
}
}
}
返回提示;
}
(} )。
继续说明想法。
小于2.3
把2.2记录在这里
小于2.24
记录2.23
就这样下去。
所以大家明白了吗?