实施例
int a = 254;
int b = 25;
int c = (closest integer to `a` that is divisible by `b`)
如何找到整数c
?该示例的结果是c = 250
。
答案 0 :(得分:13)
有两种情况需要考虑:
小于或等于a
的最接近整数:
int c1 = a - (a % b);
最接近的整数,大于a
:
int c2 = (a + b) - (a % b);
然后我们需要检查哪个更靠近a
并返回:
int c;
if (a - c1 > c2 - a) {
c = c2;
} else {
c = c1;
}
所以我们可以像这样创建一个closestInteger()
方法:
static int closestInteger(int a, int b) {
int c1 = a - (a % b);
int c2 = (a + b) - (a % b);
if (a - c1 > c2 - a) {
return c2;
} else {
return c1;
}
}
示例:
System.out.println(closestInteger(254, 25));
System.out.println(closestInteger(9, 5));
输出:
250
10
答案 1 :(得分:3)
您必须检查a
的两侧。所以我们将'c1'设置为低于(或等于)a
的最接近的整数,并将c2
设置为高于它的最接近的整数。然后比较差异。如果c1
更接近a
,请将c
设置为c1
,否则设为c2
。
int c1 = a - (a % b);
int c2 = c1 + b;
int c = a - c1 < c2 - a ? c1 : c2;
答案 2 :(得分:2)
如果您不介意在存在平局时转到下一个最高整数(例如,最接近6的整数,即4的倍数变为8而不是4),那么您可以使用这个简单的公式。不需要比较。
int c = (a + b/2)/b * b; // closest integer to `a` that is divisible by `b`
所有计算均使用整数运算完成(分数被丢弃)。
答案 3 :(得分:1)
最近的: int c =(a / b)* b;
因为a和b都是int。除法a / b将截断为最接近的值(10)。然后将结果乘以b将得出你想要的东西。
或者
最接近的方式:
int c = Math.round((float)a / b))* b;
由于a被转换为float,因此答案将是一个浮点数并且舍入到最近的int。
答案 4 :(得分:1)
var nums = [0, 9, 26, 39];
for (var i=0 ; i<nums.length;i++){
const mod = nums[i]%3;
if(mod!=0){
console.log("Closest Multiple: "+(3*Math.round(nums[i]/3)))
}else{
console.log("Closest multiple: "+nums[i])
}
}
答案 5 :(得分:0)
static void checkDivisibility(int i,int j) {
int mod = i % j;
if (mod == 0) {
System.out.println(i+ " is divisible by 13 ");
} else {
if (mod >= 7) {
i = (i + (j - mod));
} else {
i = i - mod;
}
System.out.println(i+" is the nearest divisible ");
}
}
调用此方法:checkDivisibility(40,13); 输出:39是最近的可分割
答案 6 :(得分:0)
壁橱数小于a int c1 = a - (a%b);
壁橱数量大于a int c2 = a +(b - (a%b))
现在比较哪一个与
的差异较小int d1 = a - c1;
int d2 = c2 - a;
if(d1> d2)//最接近的数字是c2
否则//最接近的数字是c1