Порядковые номера max и min цифр,натурального числа - C#
Формулировка задачи:
Дано натуральное число, в котором все цифры различны. Определить порядковые номера его максимальной и минимальной цифр, считая номера:
а) от конца числа;
б) от начала числа.
Решение задачи: «Порядковые номера max и min цифр,натурального числа»
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(); } } } }