我想编写一种方法,它不按索引(num
)返回数字(place
的数字,而不仅使用数组循环和条件。
例如:
num = 17489
,place = 1
,该方法返回9
num = 17489
这样的索引不存在,则place = 6
返回-1
如果我设置了i = 0
情况1)有效,但2)否,则代码中的某些问题不起作用
如果我设置了i = 1
,则情况2)有效,但1)否
请帮忙弄清楚哪里出了问题
public static int Digit_by_place(int num, int place)
{
int digit = 0, i = 0;
// the lop run until the place in the
while (num > 0 && i <= place)number
{
digit = num % 10;
num = num / 10;
i++;
// if there is no didgit in the input place return -1
if (i < place && num == 0)
{
return -1;
}
// return the last digit from left (the bigest)
if (num == 0 && digit > 0 && i == place)
{
return digit;
}
}
return digit;
}
答案 0 :(得分:4)
我们可以利用<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class='parent'>
<div>a</div>
<div>b4</div>
<div>52 5</div>
<hr>
<input type='text' value='323'>
</div>
最多可以有int
个数字这一事实。
代码:
10
演示:
public static int Digit_by_place(int num, int place) {
if (place <= 0 || place > 10) // place must be in [1..10] range
return -1;
else if (num == 0) // special case num == 0
return place == 1 ? 0 : -1;
for (int i = 1; i < place; ++i)
num /= 10;
return num == 0 ? -1 : Math.Abs(num % 10);
}
结果:
using System.Linq;
...
Tuple<int, int>[] tests = new Tuple<int, int>[] {
Tuple.Create( 17489, 1),
Tuple.Create( 17489, 2),
Tuple.Create( 17489, 3),
Tuple.Create( 17489, 4),
Tuple.Create( 17489, 5),
Tuple.Create( 17489, 6),
Tuple.Create(-17489, 1),
Tuple.Create(-17489, 6),
Tuple.Create( 17489, 0),
Tuple.Create( 17489, -1),
Tuple.Create(-17489, -1),
Tuple.Create( 17489, 5),
Tuple.Create(-17489, 5),
Tuple.Create( 0, 1),
Tuple.Create( 0, 4),
};
var report = string.Join(Environment.NewLine, tests
.Select(test =>
$"Digit_by_place({test.Item1,6}, {test.Item2,2}) = {Digit_by_place(test.Item1, test.Item2),2}"));
Console.Write(report);
答案 1 :(得分:1)
仅使用数学。
public int GetNumber(int number, int position)
{
if(number == 0 && position == 1)
return 0;
if(position <= 0 || position > (int)(Math.Log10(number = Math.Abs(number)) + 1))
return -1;
return (int)((number % (Math.Pow(10, position))) / (Math.Pow(10, position - 1)));
}
答案 2 :(得分:0)
for(int i=0; i<place; i++)
{
num = num / 10;
if (num <= 0)
return -1;
}
return num % 10;
如果您从0开始计数,这应该可以工作