Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Reflection.Metadata.Ecma335;
- namespace PalindromicNumberTask
- {
- /// <summary>
- /// Provides static method for working with integers.
- /// </summary>
- public static class NumbersExtension
- {
- /// <summary>
- /// Determines if a number is a palindromic number, see https://en.wikipedia.org/wiki/Palindromic_number.
- /// </summary>
- /// <param name="number">Verified number.</param>
- /// <returns>true if the verified number is palindromic number; otherwise, false.</returns>
- /// <exception cref="ArgumentException"> Thrown when source number is less than zero. </exception>
- public static bool IsPalindromicNumber(int number)
- {
- if (number < 0)
- {
- throw new ArgumentException("number is less than 0", nameof(number));
- }
- byte length = IntLength(number);
- return IsPalindromicNumberCore((int)Math.Pow(10, length - 1));
- bool IsPalindromicNumberCore(int pow)
- {
- if (number < 10)
- {
- return true;
- }
- if (number / pow != number % 10)
- {
- return false;
- }
- number = (number % pow) / 10;
- return IsPalindromicNumberCore(pow / 100);
- }
- }
- private static byte IntLength(int number) =>
- number switch
- {
- < 10 => 1,
- < 100 => 2,
- < 1000 => 3,
- < 10000 => 4,
- < 100000 => 5,
- < 1000000 => 6,
- < 10000000 => 7,
- < 100000000 => 8,
- < 1000000000 => 9,
- _ => 10
- };
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement