在不使用 C# 中的任何数组和函数的情况下从整数中查找第二个最低数字?

Find 2nd lowest digit from integer without using any array and functions in c#?

如果我有 478523698 作为整数,如何仅在 if 条件下找到第二小的数字而不将其转换为字符串,这个问题在面试中被问到。我通过将 Integer 转换为数组得到了输出

`

    int integer=478523698;
    //converting integer to array
        string s,numbers = integer.ToString();
        char[] num = numbers.ToCharArray();
        int L=num.Length;
        int[] intArray = new int[L];
        for (int i = 0; i <L; i++)
        {
            s = num[i].ToString();
            intArray[i] = Convert.ToInt32(s);
        }

    //code for getting 2nd lowest number
    int min1=intArray[0];
    int min2=0;
    if (min2 < min1)
        {
            min1 = intArray[1];
            min2 = intArray[0];
        }
    for(var i=0;i<=intArray.Length-1;i++){
           if (intArray[i] < min1)
            {
                min2 = min1;
                min1 = intArray[i];
            }
            else if (intArray[i] < min2)
            {
                min2 = intArray[i];
            }

    }
    Console.Write("Second Lowest Number is {0} ",min2); `

我认为您可以在不转换为字符串的情况下执行此操作,并使用如下所示的简单循环和条件:

int inputInteger = 478523698;
int numberSample = inputInteger;
int lowest = int.MaxValue, secondlowest = int.MaxValue;
while (numberSample != 0)
{
    int digit = numberSample % 10;
    numberSample = numberSample / 10;
    if (digit < secondlowest && digit!=lowest)
    {
        secondlowest = digit;
    }
    if (secondlowest < lowest)
    {                  
        int temp = secondlowest;
        secondlowest = lowest;
        lowest = temp;
    }
}
if (secondlowest == int.MaxValue)
{
    Console.WriteLine("There is no second lowest number");
}
else
{
    Console.WriteLine("Lowest digit in {0} is {1} and second lowest digit is {2}", inputInteger,lowest,secondlowest);
}

Working example,你可以看到上面的代码将打印输出为Lowest digit in 478523698 is 2 and the second-lowest digit is 3,如果你用222初始化inputInteger意味着输出将是[=14] =]

我相信这可以简化,但它确实有效...

 class Program
 {
     static void Main(string[] args)
     {
         var number = 478523698;
         var numberList = new List<int>();

         for (var i = 1; i <= number; i *= 10)
         {
             var currentNumber = number / i % 10;
             numberList.Add(currentNumber);
         }

         Console.WriteLine(numberList.OrderBy(x => x).Skip(1).FirstOrDefault());

         Console.Read();
     }
 }