2015-04-05 11 views

risposta

7

Ci sono due casi da considerare:

  1. Il numero intero più vicino che è inferiore o uguale a a:

    int c1 = a - (a % b); 
    
  2. Il numero intero più vicino che è maggiore di a:

    int c2 = (a + b) - (a % b); 
    

Poi abbiamo bisogno di controllare che è più vicino a a e restituire che:

int c; 
if (a - c1 > c2 - a) { 
    c = c2; 
} else { 
    c = c1; 
} 

Così abbiamo potuto creare un metodo closestInteger() come questo:

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; 
    } 
} 

Esempio:

System.out.println(closestInteger(254, 25)); 
System.out.println(closestInteger(9, 5)); 

uscita :

250 
10 
+0

Easy Peasy, squeezey limone. – Seamus

1

Il più vicino di seguito: int c = (a/b) * b;

Poiché aeb sono entrambi int. La divisione a/b troncerà al valore più vicino (10). Quindi moltiplicando il risultato per b otterrai quello che stai cercando.

Oppure

più vicino in entrambi i casi:

int c = Math.round ((float) a/b)) * b;

Dato che a viene lanciato come float, la risposta sarà un float e l'arrotondamento va all'int più vicino.

3

È necessario verificare su entrambi i lati di a. Quindi impostiamo 'c1' al numero intero più vicino (o uguale a) a e c2 per essere il numero intero più vicino sopra di esso. Quindi confrontare le differenze. Se c1 è più vicino a a, impostare c a c1, altrimenti c2.

int c1 = a - (a % b); 
int c2 = c1 + b; 
int c = a - c1 < c2 - a ? c1 : c2; 
2

Se non ti dispiace andare al successivo numero intero più alto quando c'è un pareggio (per esempio, numero intero più vicino al 6 che è un multiplo di 4 diventa 8 e non 4), quindi è possibile utilizzare questa semplice formula . Non sono necessari confronti

int c = (a + b/2)/b * b; // closest integer to `a` that is divisible by `b` 

Tutti i calcoli vengono eseguiti con l'aritmetica dei numeri interi (le frazioni vengono scartate).

+0

molto semplice, ma id piace evitare il numero intero più alto – ThatGuy343

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 "); 
    } 
} 

chiamare questo metodo: checkDivisibility (40,13); uscita: 39 è divisibile vicina

0
  • numero Armadio meno di un int c1 = a - (% B);

  • numero armadio maggiore di un int c2 = a + (b - (% B))

Ora confrontare cui si ha meno differenza da un

int d1 = a - c1;

int d2 = c2 - a;

if (d1> d2) // più vicino numero è c2

else // più vicino numero è c1

Problemi correlati