实现一个二进制加法,输入输出均为二进制字符串

367 阅读1分钟
{
  const binaryAdd = (num1: string, num2: string): string => {
    let p1: number = num1.length - 1
    let p2: number = num2.length - 1
    const result: string[] = []
    let extra: number = 0

    const saveResult = (sum: number) => {
      sum += extra
      if (sum > 1) {
        result.unshift(`${sum % 2}`)
        extra = 1
      } else {
        result.unshift(`${sum}`)
        extra = 0
      }
    }

    while (p1 >= 0 && p2 >= 0) {
      saveResult(Number(num1[p1--]) + Number(num2[p2--]))
    }
    while (p1 >= 0) saveResult(Number(num1[p1--]))
    while (p2 >= 0) saveResult(Number(num2[p2--]))
    extra === 1 && result.unshift('1')

    return result.join('')
  }

  /* === 以下是测试代码 === */
  console.log(binaryAdd('0', '1')) // '1'
  console.log(binaryAdd('1', '1')) // '10'
  console.log(binaryAdd('1010', '111')) // '10001'
}