using System;
namespace Euler118
{
class Program
{
//there are zero bouncy upto 100
static long seed = 100;
static long digits = 1000;
static int i = 1;
static long ?auxNumber = null;
static bool decreasing, increasing ;
static int bounceCount = 0;
static long bouncyNumbers = 0;
static double per = 0;
static void Main(string[] args)
{
System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
Console.WriteLine("Please enter the percentage of Bouncy numbers to be found");
double perLimit = Convert.ToDouble(Console.ReadLine());
sw.Start();
while (per < perLimit)
{
var tmpNum = ++seed;
if (digits < seed) { digits *= 10; }
do
{
i *= 10;
var res = tmpNum % 10;
tmpNum = (tmpNum - res) / 10;
if (auxNumber < res) { increasing = true; }
else if (auxNumber > res) { decreasing = true; }
if (!(increasing ^ decreasing) &&
(auxNumber != null) && (auxNumber != res)){
bounceCount += 1;
}
if (bounceCount > 0) { bouncyNumbers++; break; }
auxNumber = res;
} while (i < digits);
increasing = decreasing = false;
bounceCount = 0;
auxNumber = null;
i = 1;
double count = bouncyNumbers;
per = (count / seed) * 100;
}
sw.Stop();
Console.WriteLine("Percentage Achieved : "+per+"%");
Console.WriteLine("Total numbers generated : " + seed);
Console.WriteLine("Bouncy Numbers found : " + bouncyNumbers);
Console.WriteLine("Time Elapsed : "+sw.ElapsedMilliseconds +" ms");
Console.ReadLine();
}
}
}