This solution is generated by ChatGPT, correctness is not guaranteed.

AI solution for JavaScript Coding Question on BFE.dev
76. implement BigInt addition with sign

One approach to solve this problem is to first determine the signs of the input numbers and then perform addition accordingly. Here is the code:

function addBigIntWithSign(a, b) {
  // determine the sign of a and b
  const signA = a[0] === '-' ? -1 : 1;
  const signB = b[0] === '-' ? -1 : 1;

  // remove the sign
  a = a.replace(/[+-]/, '');
  b = b.replace(/[+-]/, '');

  // align the numbers by padding with zeros
  const maxLen = Math.max(a.length, b.length);
  a = a.padStart(maxLen, '0');
  b = b.padStart(maxLen, '0');

  let result = '';
  let carry = 0;

  // perform addition from right to left
  for (let i = maxLen - 1; i >= 0; i--) {
    const sum = parseInt(a[i]) * signA + parseInt(b[i]) * signB + carry;

    if (sum < 0) {
      carry = -1;
      result = (10 + sum) + result;
    } else {
      carry = Math.floor(sum / 10);
      result = (sum % 10) + result;
    }
  }

  // add the carry if there is any
  if (carry !== 0) {
    result = carry + result;
  }

  // add the sign back
  if (signA * signB < 0) {
    result = '-' + result;
  } else if (a[0] === '-' || b[0] === '-') {
    result = result.replace(/^0*/, '') || '0'; // remove leading zeros
    result = (a[0] === '-' ? '-' : '+') + result;
  }

  return result;
}

Let's break down the code:

  1. We first determine the signs of the input numbers using ternary operators.
  2. We remove the plus/minus signs from the input numbers using regex.
  3. We align the numbers by padding with zeros.
  4. We declare variables to hold the result and the carry.
  5. We loop through the input numbers from right to left, perform addition, and update the result and the carry variables.
  6. After the loop, we add the carry to the result if there is any.
  7. Finally, we add the sign back to the result based on the signs of the input numbers and return it. If the signs are opposite, we return a negative result. If one of the input numbers has a sign, we return a result with a plus/minus sign.

Note that this implementation is limited by JavaScript's number precision, as we are using parseInt to convert characters to digits. To handle larger numbers, we would need to implement a more complex algorithm or use a third-party library.