最近的整数

时间:2015-04-05 03:08:50

标签: java math

实施例

int a = 254;
int b = 25;

int c = (closest integer to `a` that is divisible by `b`)

如何找到整数c?该示例的结果是c = 250

7 个答案:

答案 0 :(得分:13)

有两种情况需要考虑:

  1. 小于或等于a的最接近整数:

    int c1 = a - (a % b);
    
  2. 最接近的整数,大于a

    int c2 = (a + b) - (a % b);
    
  3. 然后我们需要检查哪个更靠近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