4 回答
TA贡献1880条经验 获得超4个赞
当您坚持使用 的舍入值的方法时log10
,您还应该始终使用Math.pow(10, …)
进入另一个方向,而不是突然切换到String
操纵。
int maxi = (int)(N/Math.pow(10, Math.floor(Math.log10(N))));
如前所述,在评论中,当您使用String
操作时,Integer.toString(N).substring(0,1)
会导致一个完整的解决方案。或者,获取int
值:
int maxi = Character.digit(String.valueOf(N).charAt(0), 10);
TA贡献1780条经验 获得超3个赞
在 java8 中非常简单
public int maxi(int n) {
return String.valueOf(n)
.chars()
.map(i -> i - '0')
.max()
.orElse(0);
}
@Test
public void testMaxi() {
assertEquals(1, maxi(1000));
assertEquals(7, maxi(7654));
assertEquals(9, maxi(456778889));
}
TA贡献1826条经验 获得超6个赞
根据我的说法,你的解决方案的第一部分是最简化的并且是有效的,而不是除以 10 并一直这样做直到我们没有余数。
int N = 456778889;
double expo = Math.log10(N);
int expNum = (int)Math.floor(expo);
现在考虑到每个流,我们可以执行以下操作来生成除法数,即 1 后跟 X 个零,使用时可以给我们 MSB(最高有效位):
String c = IntStream.range(0,expNum).mapToObj(e->"0").collect(Collectors.joining(""));
String t = "1".concat(c);
int maxi = N/Integer.parseInt(t);
System.out.println(maxi);
TA贡献1886条经验 获得超2个赞
一个简单的解决方案是重复除以 10,直到只剩下一个数字:
int number = 456778889;
int result = IntStream.iterate(number, i -> i / 10) // divide by 10
.filter(i -> i < 10) // filter out if multiple digits
.findFirst().getAsInt(); // get the first value
这是不使用流的相同解决方案:
int number = 456778889;
int result;
for (result = number; result >= 10; result /= 10);
添加回答
举报