Advertisement
nakedman

http://otvet.mail.ru/question/67400442/

Nov 27th, 2011
31
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.12 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Globalization;
  4. using System.Text;
  5.  
  6. namespace ConsoleApplication1 {
  7.     static class Program {
  8.         static void Main() {
  9.             var a = ReadValue("первое");
  10.             var b = ReadValue("второе");
  11.  
  12.             var matches = Match((int)a, (int)b);
  13.             Console.WriteLine(matches);
  14.  
  15.             Pause();
  16.         }
  17.  
  18.         static decimal ReadValue(string id) {
  19.             var provider = NumberFormatInfo.InvariantInfo;
  20.  
  21.             while (true) {
  22.                 const decimal min = 100;
  23.                 const decimal max = 900;
  24.  
  25.                 Console.WriteLine("Введите {0} число (между {1} и {2})", id, min, max);
  26.                 var line = Console.ReadLine();
  27.  
  28.                 decimal result;
  29.                 if (decimal.TryParse(line, NumberStyles.Float, provider, out result)) {
  30.                     if (result >= min && result <= max) {
  31.                         return result;
  32.                     }
  33.                 }
  34.             }
  35.         }
  36.  
  37.         static Matches Match(int a, int b) {
  38.             var result = new Matches();
  39.             const int @base = 10;
  40.            
  41.             for (var i = 0; a > 0 && b > 0; i++) {
  42.                 var digit = a % @base;
  43.                 if (b % @base == digit) {
  44.                     result.Add(i);
  45.                 }
  46.  
  47.                 a /= @base;
  48.                 b /= @base;
  49.             }
  50.  
  51.             return result;
  52.         }
  53.  
  54.         static void Pause() {
  55.             Console.WriteLine("Нажмите любую клавишу для продолжения рода . . .");
  56.             Console.ReadKey();
  57.         }
  58.  
  59.         class Matches {
  60.             readonly Stack<string> _items = new Stack<string>();
  61.             static readonly string[] _names = { "единицах", "десятках", "сотнях", "тысячах" };
  62.  
  63.             public void Add(int index) {
  64.                 if (index < 0 || index >= _names.Length) {
  65.                     throw new ArgumentException();
  66.                 }
  67.  
  68.                 _items.Push(_names[index]);
  69.             }
  70.  
  71.             public override string ToString() {
  72.                 switch (_items.Count) {
  73.                     case 0:
  74.                         return "Совпадений нет";
  75.                     case 1:
  76.                         return "Совпадение в " + _items.Pop();
  77.                     default:
  78.                         var builder = new StringBuilder("Совпадения в ");
  79.  
  80.                         var first = true;
  81.                         while (_items.Count > 1) {
  82.                             if (first) {
  83.                                 first = false;
  84.                             }
  85.                             else {
  86.                                 builder.Append(", ");
  87.                             }
  88.  
  89.                             builder.Append(_items.Pop());
  90.                         }
  91.  
  92.                         builder.Append(" и ").Append(_items.Pop());
  93.                         return builder.ToString();
  94.                 }
  95.             }
  96.         }
  97.     }
  98. }
  99.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement