Advertisement
Guest User

Untitled

a guest
Oct 19th, 2019
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.91 KB | None | 0 0
  1. #!/usr/bin/env node
  2.  
  3. function getDigitFromRight(numberString, indexFromRight) {
  4. if (indexFromRight < 0) {
  5. throw new Error('you should not be here')
  6. }
  7. if (indexFromRight >= numberString.length) {
  8. return 0
  9. }
  10. return parseInt(numberString[numberString.length - 1 - indexFromRight])
  11. }
  12.  
  13. // test('getDigitFromRight', () => {
  14. // expect(getDigitFromRight('649', 0)).toBe(9)
  15. // expect(getDigitFromRight('649', 1)).toBe(4)
  16. // expect(getDigitFromRight('649', 2)).toBe(6)
  17. // })
  18. // test('return 0 when out of range', () => {
  19. // expect(getDigitFromRight('649', 3)).toBe(0)
  20. // })
  21.  
  22. function add(a = '' /*string*/, b = '' /*string*/) {
  23. let longNumberString = a
  24. let shortNumberString = b
  25. if (b.length > a.length) {
  26. longNumberString = b
  27. shortNumberString = a
  28. }
  29.  
  30. let carry = 0
  31. let answer = ''
  32.  
  33. for (let index = 0; index < longNumberString.length; index++) {
  34. const upDigit = getDigitFromRight(longNumberString, index)
  35. const downDigit = getDigitFromRight(shortNumberString, index)
  36.  
  37. const digitSum = upDigit + downDigit + carry
  38. answer = (digitSum % 10).toString() + answer
  39. carry = Math.floor(digitSum / 10)
  40. }
  41.  
  42. if (carry !== 0) {
  43. answer = carry.toString() + answer
  44. }
  45.  
  46. return answer
  47. }
  48.  
  49. // test('add', () => {
  50. // expect(add('0', '0')).toBe('0')
  51. // expect(add('0', '2')).toBe('2')
  52. // expect(add('1', '2')).toBe('3')
  53. // expect(add('10', '2')).toBe('12')
  54. // expect(add('10', '200')).toBe('210')
  55. // expect(add('96', '4')).toBe('100')
  56. // expect(add('960700081327001', '43520069100001')).toBe('1004220150427002')
  57. // })
  58. // test('add big int', () => {
  59. // expect(add('9007199254740991', '9007199254740991')).toBe('18014398509481982')
  60. // expect(add('9007199254740991', '9007199')).toBe('9007199263748190')
  61. // expect(add('9007199254740991', '90071992547409919007199254740991')).toBe('90071992547409928014398509481982')
  62. // })
  63.  
  64. const args = process.argv.slice(2)
  65. console.log(add(args[0], args[1]))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement