public Segment(int segment, int bigNumberIndex=0)
        {
            var tensAndUnits = segment%100;
            var hundreds = segment/100;

            var units = tensAndUnits % 10;
            var tens = tensAndUnits/10;

            if (tens == 1 && units > 0)
            {
                TensAndUnitsSpeller = new ElevenToNineteenSpeller(tensAndUnits);
            }
            else
            {
                var digitSpellers = new List<INumberSpeller>();

                if (tens > 0)
                {
                    digitSpellers.Add(new TensSpeller(tens));
                }
                if (units > 0)
                {
                    digitSpellers.Add(new UnitsSpeller(units));
                }
                if (digitSpellers.Count == 1)
                {
                    TensAndUnitsSpeller = digitSpellers.First();
                }
                else if (digitSpellers.Count > 1)
                {
                    TensAndUnitsSpeller = new TensAndUnitsSpeller(digitSpellers);
                }

            }

            if (hundreds > 0)
            {
                HundredsSpeller = new UnitsSpeller(hundreds);
            }

            if (bigNumberIndex > 0)
            {
                BigNumberSpeller = new BigNumberSpeller(bigNumberIndex);
            }

        }
        public Segment(int segment, int bigNumberIndex = 0)
        {
            var tensAndUnits = segment % 100;
            var hundreds     = segment / 100;

            var units = tensAndUnits % 10;
            var tens  = tensAndUnits / 10;

            if (tens == 1 && units > 0)
            {
                TensAndUnitsSpeller = new ElevenToNineteenSpeller(tensAndUnits);
            }
            else
            {
                var digitSpellers = new List <INumberSpeller>();

                if (tens > 0)
                {
                    digitSpellers.Add(new TensSpeller(tens));
                }
                if (units > 0)
                {
                    digitSpellers.Add(new UnitsSpeller(units));
                }
                if (digitSpellers.Count == 1)
                {
                    TensAndUnitsSpeller = digitSpellers.First();
                }
                else if (digitSpellers.Count > 1)
                {
                    TensAndUnitsSpeller = new TensAndUnitsSpeller(digitSpellers);
                }
            }

            if (hundreds > 0)
            {
                HundredsSpeller = new UnitsSpeller(hundreds);
            }

            if (bigNumberIndex > 0)
            {
                BigNumberSpeller = new BigNumberSpeller(bigNumberIndex);
            }
        }
        public string Spell()
        {
            var sb = new StringBuilder();

            if (HundredsSpeller != null && HundredsSpeller.Value > 0)
            {
                sb.Append($"{HundredsSpeller.Spell()} hundred");
                if (TensAndUnitsSpeller != null && TensAndUnitsSpeller.Value > 0)
                {
                    sb.Append(" and ");
                }
            }
            if (TensAndUnitsSpeller?.Value > 0)
            {
                sb.Append(TensAndUnitsSpeller.Spell());
            }
            if (BigNumberSpeller != null && BigNumberSpeller.Value > 0)
            {
                sb.Append(" ").Append(BigNumberSpeller.Spell());
            }
            return(sb.ToString());
        }