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條經驗 獲得超4個贊
在 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);
添加回答
舉報