数学运算

2025-07-09 19:55:36

字符串相加

给定两个字符串形式的正数相加

add.ts
test.ts
          function add(a: string, b: string) {
  let [intA, decA = ''] = a.split('.')
  let [intB, decB = ''] = b.split('.')

  const maxIntLen = Math.max(intA.length, intB.length)
  const maxDecLen = Math.max(decA.length, decB.length)

  intA = intA.padStart(maxIntLen, '0')
  intB = intB.padStart(maxIntLen, '0')
  decA = decA.padEnd(maxDecLen, '0')
  decB = decB.padEnd(maxDecLen, '0')

  let carry = 0

  let decimal = ''
  for (let i = maxDecLen - 1; i >= 0; i--) {
    const sum = Number(decA[i]) + Number(decB[i]) + carry
    decimal = (sum % 10) + decimal
    carry = Math.floor(sum / 10)
  }

  let integer = ''
  for (let i = maxIntLen - 1; i >= 0; i--) {
    const sum = Number(intA[i]) + Number(intB[i]) + carry
    integer = (sum % 10) + integer
    carry = Math.floor(sum / 10)
  }

  if (carry > 0) integer = carry + integer
  decimal = decimal.replace(/0+$/, '')

  return decimal ? `${integer}.${decimal}` : integer
}

        
          expect(add('0.1', '0.2')).toBe("0.3")
expect(add('1.818', '1.2')).toBe("3.018")
expect(add('0.09', '0.001')).toBe("0.091")
expect(add('999.999', '0.001')).toBe("1000")
expect(add('1', '999999999999')).toBe("1000000000000")

        
© 2021-2025 sunshj's Blog