narsss
@narsss
Ничего не умею, только спрашиваю

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

Например 1234 или 6541, вообще возможно ли написать такую функцию
  • Вопрос задан
  • 1059 просмотров
Решения вопроса 1
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();
        }
    }
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
Если первое число меньше второго то считаем по восходящей ветке, если нет то по нисходящей в другом случае возвращаем ложь. Восходящая и нисходящие ветки перебирают числа и если условие не верно возвращаю ложь, если дошли до конца то возвращают истину.
Ответ написан
Комментировать
@i__egor
1. Преобразую число в строку (string s = i.ToString())
2. Перебирай строку, преобразуя char в int с помощью System.Convert (Convert.ToInt32(c))
3. Сравнивай 2 соседних числа
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы