Порядковые номера max и min цифр,натурального числа - C#

Формулировка задачи:

Дано натуральное число, в котором все цифры различны. Определить порядковые номера его максимальной и минимальной цифр, считая номера: а) от конца числа; б) от начала числа.

Код к задаче: «Порядковые номера max и min цифр,натурального числа - C#»

textual
[CSHARP]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace System.Collections.Generic.IEnumerable
{
    class Program
    {
        static void Main()
        {
            int n = 851469732;
            var dc = new DigitCollection(n);
            int maxPos = dc.GetMaxDigitPosition();
            int minPos = dc.GetMinDigitPosition();
            Console.WriteLine(dc);
            Console.WriteLine("from head min pos: {0}, from head max pos: {1}", minPos + 1, maxPos + 1);
            Console.ReadKey();
        }
 
        public interface IReadOnlyList<out T> : IEnumerable<T>
        {
            
            T this[int index] { get;}
            int Count { get; }
        }
 
        public sealed class DigitCollection : IReadOnlyList<int>
        {
            private readonly int _number;
            private readonly List<int> _digits;
 
            public DigitCollection(int number)
            {
                _number = number;
                _digits = new List<int>(10);
                FillDigits();
            }
 
            private void FillDigits()
            {
                foreach(var d in new NumberEnumerator(_number))
                {
                    _digits.Add(d);
                    ++Count;
                }
                _digits.Reverse();
            }
 
            public int GetMaxDigitPosition()
            {
                return _digits.IndexOf(_digits.Max());
            }
 
            public int GetMinDigitPosition()
            {
                return _digits.IndexOf(_digits.Min()); 
            }
 
            public override string ToString()
            {
                var str = string.Join(" ", _digits);
                return string.Format("Source Number: {0}{1} Digits: {2}", _number, Environment.NewLine, str);
            }
 
            public IEnumerator<int> GetEnumerator()
            {
                return _digits.GetEnumerator();
            }
 
            IEnumerable<> IEnumerable.GetEnumerator() // IEnumerable<Какой ТИП поставить>?? ошибки показывает требуется ТИП
            {
                return GetEnumerator();
            }
 
            public int Count
            {
                get; private set;
            }
 
            public int this[int index]
            {
                get { return _digits[index]; }
            }
        }
 
        internal sealed class NumberEnumerator : IEnumerator<int>, IEnumerable<int>
        {
            internal int Number
            {
                get; private set;
            }
 
            public NumberEnumerator(int number)
            {
                Number = number;
                _currentNumber = number;
            }
 
            private int _currentNumber;
            private int _digit;
 
            public void Dispose()
            {
                Reset();
            }
 
            public bool MoveNext()
            {
                if(_currentNumber == 0)
                    return false;
                _digit = _currentNumber % 10;
                _currentNumber /= 10;
                return true;
            }
 
            public void Reset()
            {
                _currentNumber = Number;
            }
 
            public int Current
            {
                get { return _digit; }
            }
 
            object IEnumerator.Current
            {
                get { return Current; }
            }
 
            public IEnumerator<int> GetEnumerator()
            {
                return this;
            }
 
            IEnumerator IEnumerable.GetEnumerator()
            {
                return GetEnumerator();
            }
        }
    }
}

8   голосов, оценка 4.125 из 5


СОХРАНИТЬ ССЫЛКУ