mirror of
https://github.com/TheAlgorithms/JavaScript.git
synced 2025-07-05 16:26:47 +08:00
feat: add Automorphic Numbers and tests in Math (#1496)
* feat: add automorphic number and tests * fix: add spaces * fix: merge tests with test.each
This commit is contained in:
40
Maths/AutomorphicNumber.js
Normal file
40
Maths/AutomorphicNumber.js
Normal file
@ -0,0 +1,40 @@
|
||||
/**
|
||||
* @function isAutomorphic
|
||||
* @author [SilverDragonOfR] (https://github.com/SilverDragonOfR)
|
||||
*
|
||||
* @see [Automorphic] (https://en.wikipedia.org/wiki/Automorphic_number)
|
||||
* @description This script will check whether a number is Automorphic or not
|
||||
* @description A number n is said to be a Automorphic number if the square of n ends in the same digits as n itself.
|
||||
*
|
||||
* @param {Integer} n - the n for nth Catalan Number
|
||||
* @return {Integer} - the nth Catalan Number
|
||||
* @complexity Time: O(log10(n)) , Space: O(1)
|
||||
*
|
||||
* @convention We define Automorphic only for whole number integers. For negetive integer we return False. For float or String we show error.
|
||||
* @examples 0, 1, 5, 6, 25, 76, 376, 625, 9376 are some Automorphic numbers
|
||||
*/
|
||||
|
||||
// n is the number to be checked
|
||||
export const isAutomorphic = (n) => {
|
||||
if (typeof n !== 'number') {
|
||||
throw new Error('Type of n must be number')
|
||||
}
|
||||
if (!Number.isInteger(n)) {
|
||||
throw new Error('n cannot be a floating point number')
|
||||
}
|
||||
if (n < 0) {
|
||||
return false
|
||||
}
|
||||
|
||||
// now n is a whole number integer >= 0
|
||||
let n_sq = n * n
|
||||
while (n > 0) {
|
||||
if (n % 10 !== n_sq % 10) {
|
||||
return false
|
||||
}
|
||||
n = Math.floor(n / 10)
|
||||
n_sq = Math.floor(n_sq / 10)
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
28
Maths/test/AutomorphicNumber.test.js
Normal file
28
Maths/test/AutomorphicNumber.test.js
Normal file
@ -0,0 +1,28 @@
|
||||
import { isAutomorphic } from '../AutomorphicNumber'
|
||||
|
||||
describe('AutomorphicNumber', () => {
|
||||
it('should throw Error when n is String', () => {
|
||||
expect(() => isAutomorphic('qwerty')).toThrow()
|
||||
})
|
||||
it('should throw Error when n is floating point', () => {
|
||||
expect(() => isAutomorphic(13.6)).toThrow()
|
||||
})
|
||||
|
||||
test.each([
|
||||
{ n: -3 , expected: false },
|
||||
{ n: -25 , expected: false },
|
||||
])('should return false when n is negetive', ({ n, expected }) => {
|
||||
expect(isAutomorphic(n)).toBe(false)
|
||||
})
|
||||
|
||||
test.each([
|
||||
{ n: 7 , expected: false },
|
||||
{ n: 83 , expected: false },
|
||||
{ n: 0 , expected: true },
|
||||
{ n: 1 , expected: true },
|
||||
{ n: 376 , expected: true },
|
||||
{ n: 90625 , expected: true },
|
||||
])('should return $expected when n is $n', ({ n, expected }) => {
|
||||
expect(isAutomorphic(n)).toBe(expected)
|
||||
})
|
||||
})
|
Reference in New Issue
Block a user