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

C++의 처음과 마지막 세 비트

<시간/>

이 문제에서 숫자 N이 주어집니다. 우리의 임무는 주어진 정수 값 N에 대해 처음 세 비트와 마지막 세 비트의 십진 변환을 찾는 것입니다. .

문제를 이해하기 위해 예를 들어 보겠습니다.

Input : 57
Output : 71

솔루션 접근 방식

간단한 해결책은 숫자 n을 해당하는 이진법으로 변경한 다음 배열에 비트를 저장하는 것입니다. 그런 다음 배열의 처음 세 값과 마지막 세 값을 개별적으로 숫자로 변환합니다. 두 비트 세트의 10진수 변환이 결과입니다.

예를 들어 숫자 80을 사용합니다.

80의 이진 변환은 1010000입니다.

처음 세 비트(101)의 10진수 변환은 5입니다.

마지막 세 비트(000)에 해당하는 10진수는 0입니다.

따라서 출력은 5 0입니다.

예시

솔루션 작동을 설명하는 프로그램

#include <bits/stdc++.h>
using namespace std;
void convtbnTodcml(int n)
{
   int arr[64] = { 0 };
   int x = 0, index;
   for (index = 0; n > 0; index++) {
      arr[index] = n % 2;
      n /= 2;
   }
   x = (index < 3) ? 3 : index;
   int d = 0, p = 0;
   for (int index = x - 3; index < x; index++)
      d += arr[index] * pow(2, p++);
   cout << d << " ";
   d = 0;
   p = 0;
   for (int index = 0; index < 3; index++)
      d += arr[index] * pow(2, p++);
   cout << d;
}
int main()
{
   int n = 57;
   cout<<"Decimal conversion of first and last bits of the number "<<n<<" is ";
   convtbnTodcml(n);
   return 0;
}

출력

Decimal conversion of first and last bits of the number 57 is 7 1