尝试编写此脚本,以处理通常高达数千亿的输入。但是,Math.ceil不会向上舍入吗?
int clayturns = (int)Math.ceil(clayneeded / 7500000000L);
System.out.println((int) Math.ceil(clayneeded / 7500000000L));
System.out.println("we need " + clayturns + "turns");
System.out.println("we need " + clayneeded + " clay added to our specific village.");下面是eclipse控制台的输出。正如你所看到的,clayneeded不是空白的。如果真是这样,那么粘土圈应该一直是某个东西,它不可能是零,但它确实是。
we need 0turns
we need 3021588634 clay needed to our specific village.请让我知道你的想法。数学天花板不能和Long一起工作吗?
发布于 2019-03-22 22:35:30
clayneeded是int/long吗?如果你在做int/long除法,它会在小数部分到达Math.ceil之前截断它。考虑到输入的大小,我建议不要使用floats/doubles,而是使用BigDecimals来精确计算。
发布于 2019-03-22 22:36:24
看起来clayneeded有整数类型(可能是long)。所以clayneeded/7500000000L是整数除法商(),因此ceil计算整数的上限,因此它本身。
long remainder = clayneeded % 7500000000L;
long result = (clayneeded/7500000000L)+(remainder!=0?1:0);发布于 2019-03-22 22:37:38
整数的最大值为+2,147,483,647。
https://stackoverflow.com/questions/55301864
复制相似问题