以下为ChatGPT自动生成的解答,正确与否请自行判断。

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

解题思路:

  • 将两个数转换成整数,避免小数点带来的运算不确定性。

  • 将被除数、除数都以绝对值形式进行计算。

  • 每次除法,从被除数中减去尽可能多的除数,直到无法相减。记录减去的次数。

  • 如果被除数最后减到0,所有相除都被减下来了。其中,符号与原始两数相同,返回result值。

  • 如果被除数还剩余减数,只取最多20位小数。 ```js 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);

} ```