Местоположение
Россия

Достижения

Все достижения (13)

Наибольший вклад в теги

Все теги (75)

Лучшие ответы пользователя

Все ответы (116)
  • Как можно проверить,что цифры числа расположены в возрастающем порядке или в убывающем?

    Casper-SC
    @Casper-SC
    Программист (.NET)
    Обновлено
    Заметь, что если следующая цифра не соответствует условию, то все вычисления и перебор прекращаются. То есть, мы не получаем целиком массив цифр, а вычисляем цифры поочереди, после того как определили возрастает ли новая цифра или уменьшается по сравнению с предыдущей цифрой.

    using System;
    using System.Collections.Generic;
    using static Numbers.NumberAlgorithm;
    
    namespace Numbers
    {
        public static class NumberAlgorithm
        {
            public static bool AreDigitsIncreasing(int number)
            {
                int prevDigit = 0;
                int counter = 0;
                foreach (int digit in GetDigits(number))
                {
                    if (counter != 0 && prevDigit >= digit)
                    {
                        return false;
                    }
    
                    ++counter;
                    prevDigit = digit;
                }
    
                return counter > 1;
            }
    
            public static bool AreDigitsDecreasing(int number)
            {
                int prevDigit = 0;
                int counter = 0;
                foreach (int digit in GetDigits(number))
                {
                    if (counter != 0 && prevDigit <= digit)
                    {
                        return false;
                    }
    
                    ++counter;
                    prevDigit = digit;
                }
    
                return counter > 1;
            }
    
            public static IEnumerable<int> GetDigits(int source)
            {
                int digit = 0;
                int coefficient = (int)Math.Pow(10, GetCountOfDigits(source));
                do
                {
                    source -= coefficient * digit;
                    coefficient /= 10;
                    digit = source / coefficient;
    
                    yield return digit;
                } while (coefficient > 1);
            }
    
            public static int GetCountOfDigits(int number)
            {
                return number == 0 ? 1 : (int)Math.Ceiling(Math.Log10(Math.Abs(number) + 0.5));
            }
        }
    
        class Program
        {
            private const string DigitsAreIncreasing = "Цифры возрастают слева направо";
            private const string DigitsAreDecreasing = "Цифры понижаются слева направо";
            private const string DigitsAreMixed = "Цифры не упорядочены";
    
            static void Main(string[] args)
            {
                int[] numbers = { 123456789, 987654321, 2312, 0 };
                for (int i = 0; i < numbers.Length; i++)
                {
                    int number = numbers[i];
    
                    string message;
                    if (AreDigitsIncreasing(number))
                    {
                        message = DigitsAreIncreasing;
                    }
                    else if (AreDigitsDecreasing(number))
                    {
                        message = DigitsAreDecreasing;
                    }
                    else
                    {
                        message = DigitsAreMixed;
                    }
    
                    Console.WriteLine($"{(i + 1):D2}: Исходное число {number.ToString()}. {message}.");
    
                }
    
                Console.ReadKey();
            }
        }
    }
    Ответ написан
    Комментировать

Лучшие вопросы пользователя

Все вопросы (121)