在不使用 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();
}
}
如果我有 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();
}
}