【JavaScript】7-18 二分法求多项式单根 (20分)
题目:
输入格式:
输入在第1行中顺序给出多项式的4个系数a3、a2、a1、a0,在第2行中顺序给出区间端点a和b。题目保证多项式在给定区间内存在唯一单根。
输出格式:
在一行中输出该多项式在该区间内的根,精确到小数点后2位。
输入样例:
3 -1 -3 1 -0.5 0.5 |
输出样例:
0.33 |
JavaScript代码:
var readline = require('readline'); var readlineTest = readline.createInterface({ input: process.stdin, output: process.stdout }); var lineCounts=2;//输入的行数,参数写死 var tempArray=[];//创建数组来存储每一行的数据 var tempArrayIndex=0;//初始化数组的索引 readlineTest.on('line', function(line){ //将每一行的内容添加至数组tempArray tempArray[tempArrayIndex]=line; tempArrayIndex++; //当已输入的行数达到最大输入的行数时,结束readline.Interface实例 if(tempArray.length==lineCounts){ var line1 = tempArray[0].split(' ') var line2 = tempArray[1].split(' ') var a3 = parseFloat(line1[0]) var a2 = parseFloat(line1[1]) var a1 = parseFloat(line1[2]) var a0 = parseFloat(line1[3]) var a = parseFloat(line2[0]) var b = parseFloat(line2[1]) var ret = sep(a3,a2,a1,a0,a,b) console.log(ret) readlineTest.close(); } }); //当readlineTest执行'close'命令时,输入流关闭,程序结束。 readlineTest.on('close', function() { process.exit(0) }); function sep(a3,a2,a1,a0,a,b) { var left = a var right = b while(right - left >= 0.01) { var mid = (left + right) / 2 if(f(a3,a2,a1,a0,mid) == 0){ break } if(f(a3,a2,a1,a0,mid) * f(a3,a2,a1,a0,left) < 0) { right = mid } else { left = mid } } return ((left + right) / 2).toFixed(2) } function f(a3,a2,a1,a0,x) { var fun = a3 * x * x * x + a2 * x * x + a1 * x + a0 return fun }