亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 Java-8 獲取最重要的十進制數字

使用 Java-8 獲取最重要的十進制數字

aluckdog 2023-03-31 14:53:38
我正在嘗試獲取整數的最高有效十進制數字,我的方法如下:我正在嘗試獲取 Integer(N) 中的總位數(計數);我將 Integer(N) 除以 1(....count 乘以 0)。我已經完成了以下代碼并且工作正常,我只是想在可能的情況下使用 java-8 來實現它。int N = 456778889;double expo = Math.log10(N);int expNum = (int)Math.floor(expo)+1;  //gets the total digits in the Integer N現在我有了數字 N 中的總位數,所以我可以將 N 除以 1,然后是零的總數,以實現這個 1,然后是 X 個零,我的邏輯如下:    StringBuilder sb = new StringBuilder("1");    sb.setLength(expNum);    String f = sb.toString().replaceAll("[^0-9]","0"); // It makes the 1 followed by X amount of zero that i require to get my MSB    int mostSigNum = N/(Integer.valueOf(f));    System.out.println(mostSigNum);我知道我的方法有點不同,因為我主要使用日志和其他數學函數,但我真的想以不同的方式來做。Java 8和流類型中的任何方法都可以提供幫助,我們將不勝感激。
查看完整描述

4 回答

?
慕村225694

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);


查看完整回答
反對 回復 2023-03-31
?
Helenr

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));

}


查看完整回答
反對 回復 2023-03-31
?
躍然一笑

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);


查看完整回答
反對 回復 2023-03-31
?
MM們

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);


查看完整回答
反對 回復 2023-03-31
  • 4 回答
  • 0 關注
  • 157 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號