我正在尝试将数字[0..999]
实现到数组中的某个位置。例如:
number: 9 - array: 009 /// number 78 - array 078 /// number 245 - array 245.
这是我的源代码,它有效,但是有没有更简单的方法来完成任务,如果数字更大可能会有用吗?
uint check;
uint[] number= new uint[3];
while (true)
{
Console.WriteLine("Input number");
string input = Console.ReadLine();
if (uint.TryParse(input, out check))
{
if (check < 10)
{
number[2] = Convert.ToUInt32(Convert.ToString(input[0]));
break;
}
else if (check < 100)
{
number[1] = Convert.ToUInt32(Convert.ToString(input[0]));
number[2] = Convert.ToUInt32(Convert.ToString(input[1]));
break;
}
else if (check < 1000)
{
number[0] = Convert.ToUInt32(Convert.ToString(input[0]));
number[1] = Convert.ToUInt32(Convert.ToString(input[1]));
number[2] = Convert.ToUInt32(Convert.ToString(input[2]));
break;
}
else
{
Console.WriteLine("Out of range. Try again");
}
}
}
答案 0 :(得分:2)
您可以使用模运算符:
if (uint.TryParse(input, out check))
{
if (check < 1000)
{
number[2] = check % 10; //gets last digit
check /= 10; //"shaves off" last digit
number[1] = check % 10;
check /= 10;
number[0] = check % 10;
}
else
{
Console.WriteLine("Out of range. Try again");
}
}
请注意,通过这种方式,您可以使用以下代码对任意大数字进行数字化,而不仅仅是小于1000的数字:
List<int> digits = new List<int>();
if (uint.TryParse(input, out check))
{
while (check != 0)
{
digits.Insert(0, check % 10);
check /=10;
}
}
int[] digitsArray = digits.ToArray();
答案 1 :(得分:0)
也许这种方法可能会有所帮助。它将给定的number
转换为数字数组:
private static int[] NumberToArray(int number)
{
int[] digits = new int[(int)(Math.Log10(number) + 0.999999)];
int i = digits.Length - 1;
while (number >= 10)
{
int rem;
number = Math.DivRem(number, 10, out rem);
digits[i--] = rem;
}
digits[0] = number;
return digits;
}
由于int
而使用的Math.DivRem
类型仅接受签名类型。