I am trying to create a function that returns the persistence of a number, the main problem I believe is my do while loop at the bottom, I dont know how to get it to detect when there is one digit. The object is to iterate through using the nested function and increase the count with each iteration until the n equals a one digit number. The count is the numbers persistence, which is the number of times you must multiply the digits in the num until you reach a single digit. I expect 3 but I am getting the value of 2 instead.
class Program
{
static void Main(string[] args)
{
Console.WriteLine(Persist.Persistence(39));
Console.ReadLine();
}
}
public class Persist
{
public static int Persistence(long n)
{
int count = 0;
if (n.ToString().Length == 1)
{
return count;
}
count = 1;
//break up each number in the long individually.
List<long> listofLong = new List<long>();
while (n > 0)
{
listofLong.Add(n % 10);
n = n / 10;
}
//First iteration of each number mult each other in list
long calculate(List<long> seperatedNums)
{
long mult = 1;
for (int i = 0; i < seperatedNums.Count; i++)
mult *= seperatedNums[i];
return (int)mult;
}
do
{
calculate(listofLong);
count++;
} while ((Math.Floor(Math.Log10(n)) + 1) > 1);
return count;
}
}
}