Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 n에 가장 가깝고 m으로 나눌 수 있는 수 찾기

<시간/>

두 개의 정수 n과 m이 있다고 가정합니다. n에 가장 가까운 수를 찾아 m으로 나누어야 합니다. 그러한 숫자가 두 개 이상인 경우 절대값이 최대인 숫자를 표시하십시오. n이 m으로 완전히 나누어지면 n을 반환합니다. 따라서 n =13, m =4이면 출력은 12입니다.

이 문제를 해결하기 위해 다음 단계를 수행할 수 있습니다. -

  • q:=n/m 및 n1:=m*q
  • n * m> 0이면 n2 :=m * (q + 1), 그렇지 않으면 n2 :=m * (q - 1)
  • 만약 |n – n1| <|n – n2|, n1 반환, 그렇지 않으면 n2 반환

예시

#include<iostream>
#include<cmath>
using namespace std;
int findClosest(int n, int m) {
   int q = n / m;
   int n1 = m * q;
   int n2 = (n * m) > 0 ? (m * (q + 1)) : (m * (q - 1));
   if (abs(n - n1) < abs(n - n2))
      return n1;
   return n2;
}
int main() {
   int n = 13, m = 4;
   cout << "Closest for n = " << n << ", and m = " << m << ": " << findClosest(n, m) << endl;
      n = 0; m = 8;
   cout << "Closest for n = " << n << ", and m = " << m << ": " << findClosest(n, m) << endl;
      n = 18; m = -7;
   cout << "Closest for n = " << n << ", and m = " << m << ": " << findClosest(n, m) << endl;
}
에 대해 가장 가깝습니다.

출력

Closest for n = 13, and m = 4: 12
Closest for n = 0, and m = 8: 0
Closest for n = 18, and m = -7: 21