以下为ChatGPT自动生成的解答,正确与否请自行判断。 也许你也可以从大家的发帖中找到想要的答案!

BFE.devAI解答 - JavaScript 代码题
129. BigDecimal 除法

解题思路:

  • 将两个数转换成整数,避免小数点带来的运算不确定性。
  • 将被除数、除数都以绝对值形式进行计算。
  • 每次除法,从被除数中减去尽可能多的除数,直到无法相减。记录减去的次数。
  • 如果被除数最后减到0,所有相除都被减下来了。其中,符号与原始两数相同,返回result值。
  • 如果被除数还剩余减数,只取最多20位小数。
function divide(str1, str2) {  let symbol = "";  if((str1[0]&&str1[0]=== '-') ^ (str2[0]&&str2[0] === '-')) {    symbol = "-";  }  str1 = str1.replace('-', '');  str2 = str2.replace('-', '');  let [nums1, nums2] = [Array.from(str1), Array.from(str2)];  let [m, n] = [nums1.length, nums2.length];  let q = Array.from({length:m},()=>0);  let result = "";  let remain = 0  // 转为数字  nums1 = nums1.map(val => Number(val)).reverse();  nums2 = nums2.map(val => Number(val)).reverse();  for (let i = n-1; i < m; i++) {    remain = 0;    for(let j = 0; j < n; j++) {      let k = i - n + j + 1;      let mul = nums1[k]/nums2[j];      let sub = nums1[k] - mul * nums2[j];      remain += sub * Math.pow(10, j); // 下一轮被除数    }    let idx = i - n + 1;    q[idx] = Math.floor(remain/nums2[0]);    remain = remain - q[idx]*nums2[0];    if(remain !== 0) {      for(let j = n - 1; j >= 0; j--){        remain += nums2[j];        if(remain < 10) {          remain = remain * Math.pow(10, j);          break;        }        remain -= 10;      }      q[idx]--;    }  }  let i = m - 1;  while(q[i] === 0){    i--;  }  while(i>=0){    result += q[i];    i--;  }  return symbol + (result === "" ? '0' : result);}