我想检查(包括)两个双打之间的东西是否是一百的倍数。
使用 30 45 8 204 165 95 28 180 110 40
..........
30 8 45 165 95 28 180 110 40
8 30 45 95 28 165 110 40
8 30 45 28 95 110 40
8 30 28 45 95 40
8 28 30 45 40
8 28 30 40
8 28 30
8 28
8
我可以检查一个双,但我想检查两个双打。
示例:
if (double1 % 100 == 0)
应该返回false但是
double double1 = 398, double2 = 399.6;
应该回归真实。
答案 0 :(得分:1)
如果我正确理解您的问题,那么以下步骤可能会有所帮助:
基于第一个数字总是小于第二个数字的假设,下面显示了一个示例代码,但这不是很有效。
static boolean isDivisibleby100(double double1, double double2) {
int int1 = (int) Math.ceil(double1);
int int2 = (int) Math.floor(double2);
for (int i = int1; i <= int2; i++) {
if (i % 100 == 0) {
return true;
}
}
return false;
}
答案 1 :(得分:0)
当案例为true
double1 = 398
^ //look at that digit - (and greater)
double2 = 399.6
^ //they are the same, return false!
double1 = 797.5
^ //look at that digit - (and greater)
double2 = 801.2
^ //they are not the same, return true!
double1 = 2300
^^ //look at that digit - (and greater)
double2 = 230
^ //they are not the same, return true!
您可以轻松地将它们转换为int
值(因此忽略任何小数值),然后除以100(砍掉以下数百位以下的任何值)它现在是一个int )
如果您的值也可能是负值,-75
和75
都会分为0并且相同,从而返回false
。
对于这种情况,一种简单的检查方法是乘以双打并查看它是否小于或等于0
double1 = -50;
double2 = 1;
//multiply, result is <= 0, return true
double1 = -5;
double2 = -2;
//multiply, result is > 0, return false
double1 = 1;
double2 = 3;
//multiply, result is > 0, return false
double1 = 0;
double2 = 3;
//multiply, result is <= 0, return true
答案 2 :(得分:0)
给定双精度d1和d2,是否存在整数x,使得x是100的倍数,并且在[d1,d2]范围内?
1)如果两个数字之间的差异为> = 100,则返回true。
2)如果d1 / 100(整数除法)!= d2 / 100,则返回true
3)如果d1 * d2 <= 0,则返回true
4)如果d1或d2是100的倍数,则返回true
5)返回false
步骤1处理诸如(100,1100)之类的情况。步骤2处理诸如(250,300)之类的情况。步骤3处理诸如(-5,5)或(0,10)的情况。步骤4处理诸如(100,101)之类的情况。
function test(d1, d2) {
if (d2 - d1 >= 100) return true;
if (((d1/100)|0) != ((d2/100)|0)) return true;
if (d1*d2 <= 0) return true;
if ((d1|0) % 100 == 0 || (d2|0) % 100 == 0) return true;
return false;
}
var cases = [
true, 100, 200,
true, 0, 1,
true, -5, 5,
true, 99, 101,
true, 10.2, 101.2,
true, -0.1, 1.1,
true, 100, 100,
true, 0, 0,
false, 50, 99,
false, 101, 102,
false, 394.3, 399.9,
false, 1, 1,
false, 1001.2, 1001.4
];
for (var i = 0; i < cases.length; i += 3) {
if (test(cases[i + 1], cases[i + 2]) != cases[i]) {
alert("fail! " + cases[i + 1] + " " + cases[i + 2]);
}
}
&#13;
答案 3 :(得分:0)
我认为这里提出的其他解决方案有点过于复杂 以下是如何在O(1)中完成的。
public class Test011 {
public static void main(String[] args) {
System.out.println(containsMultipleOf100(99.5, 101.2));
System.out.println(containsMultipleOf100(101.1, 201.2));
System.out.println(containsMultipleOf100(100.001, 199.992));
}
static boolean containsMultipleOf100(double double1, double double2) {
long int1 = (long) Math.ceil(double1);
long int2 = (long) Math.floor(double2);
if ((int2 - (int1-1)) >= 100){
return true;
}else{
return (int2 / 100) * 100 >= int1;
}
}
}