diff --git a/Maths/isPalindromeIntegerNumber.js b/Maths/isPalindromeIntegerNumber.js new file mode 100644 index 000000000..c310b73f6 --- /dev/null +++ b/Maths/isPalindromeIntegerNumber.js @@ -0,0 +1,33 @@ +/** + * @function isPalindromeIntegerNumber + * @param { Number } x + * @returns {boolean} - input integer is palindrome or not + * + * time complexity : O(log_10(N)) + * space complexity : O(1) + */ +export function isPalindromeIntegerNumber (x) { + if (typeof x !== 'number') { + throw new TypeError('Input must be a integer number') + } + // check x is integer + if (!Number.isInteger(x)) { + return false + } + + // if it has '-' it cannot be palindrome + if (x < 0) return false + + // make x reverse + let reversed = 0 + let num = x + + while (num > 0) { + const lastDigit = num % 10 + reversed = reversed * 10 + lastDigit + num = Math.floor(num / 10) + } + + // compare origin x and reversed are same + return x === reversed +} diff --git a/Maths/test/isPalindromeIntegerNumber.test.js b/Maths/test/isPalindromeIntegerNumber.test.js new file mode 100644 index 000000000..5efa350e4 --- /dev/null +++ b/Maths/test/isPalindromeIntegerNumber.test.js @@ -0,0 +1,32 @@ +import { isPalindromeIntegerNumber } from '../isPalindromeIntegerNumber' + +describe('isPalindromeIntegerNumber', () => { + it('expects to return true when length of input is 1', () => { + expect(isPalindromeIntegerNumber(6)).toEqual(true) + }) + + it('expects to return true when input is palindrome', () => { + expect(isPalindromeIntegerNumber(121)).toEqual(true) + expect(isPalindromeIntegerNumber(12321)).toEqual(true) + expect(isPalindromeIntegerNumber(1221)).toEqual(true) + }) + + it('expects to return false when input is not palindrome', () => { + expect(isPalindromeIntegerNumber(189)).toEqual(false) + }) + + it('expects to return false when input is minus', () => { + expect(isPalindromeIntegerNumber(-121)).toEqual(false) + expect(isPalindromeIntegerNumber(-12321)).toEqual(false) + }) + + it('expects to return false when input is not integer number', () => { + expect(isPalindromeIntegerNumber(123.456)).toEqual(false) + }) + + it('expects to throw error when input is not a number', () => { + expect(() => isPalindromeIntegerNumber(undefined)).toThrowError() + expect(() => isPalindromeIntegerNumber({ key: 'val' })).toThrowError() + expect(() => isPalindromeIntegerNumber([])).toThrowError() + }) +})