使用 Java-8 获取最重要的十进制数字

我正在尝试获取整数的最高有效十进制数字,我的方法如下:

  1. 我正在尝试获取 Integer(N) 中的总位数(计数);

  2. 我将 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和流类型中的任何方法都可以提供帮助,我们将不胜感激。


aluckdog
浏览 114回答 4
4回答

慕村225694

当您坚持使用 的舍入值的方法时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);

Helenr

在 java8 中非常简单public int maxi(int n) {    return String.valueOf(n)            .chars()            .map(i -> i - '0')            .max()            .orElse(0);}@Testpublic void testMaxi() {    assertEquals(1, maxi(1000));    assertEquals(7, maxi(7654));    assertEquals(9, maxi(456778889));}

跃然一笑

根据我的说法,你的解决方案的第一部分是最简化的并且是有效的,而不是除以 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);

MM们

一个简单的解决方案是重复除以 10,直到只剩下一个数字:int number = 456778889;int result = IntStream.iterate(number, i -> i / 10) // divide by 10&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .filter(i -> i < 10)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // filter out if multiple digits&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .findFirst().getAsInt();&nbsp; &nbsp; &nbsp; // get the first value这是不使用流的相同解决方案:int number = 456778889;int result;for (result = number; result >= 10; result /= 10);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java