우리는 많은 수를 받습니다. 목표는 8로 나누어 떨어지는 num의 회전 수를 계산하는 것입니다.
회전을 반복해서 수행할 수 없기 때문입니다. 우리는 8로 나눌 수 있는 속성을 사용할 것입니다. 마지막 세 자리가 8의 배수이면 8의 배수입니다. 1800이면 회전은 1800, 0180, 0018, 1800 중 8001은 8로 나누어집니다.
예를 들어 이해합시다.
입력 - 숫자=15320
출력 − 4로 나눌 수 있는 회전 수는 다음과 같습니다. 1
설명 − 회전은 −
15320, 01532, 20153, 32015, 53201 Out of these, only 15320 is divisible by 8.
입력 - 숫자=848484
출력 − 4로 나눌 수 있는 회전 수는 다음과 같습니다. 3
설명 − 회전은 −
848484, 484848, 848484, 484848, 848484, 484848 Out of this all 484848’s are divisible by 8.
아래 프로그램에서 사용한 접근 방식은 다음과 같습니다.
숫자를 문자열로 변환하고 for 루프를 사용하여 숫자를 탐색합니다. 세 자리의 각 쌍에 대해 정수로 변환하고 8의 배수성을 확인합니다. 나눌 수 있으면 개수를 늘립니다.
-
긴 숫자만큼 숫자를 가져옵니다.
-
Rotation_8(long long num) 함수는 숫자 num을 받아 8로 나눌 수 있는 num의 회전 수를 반환합니다.
-
숫자를 문자열 str=to_string(num)으로 변환합니다.
-
num의 자릿수는 length=str.length()입니다.
-
세 자리의 정수 값을 저장하기 위해 임시 변수 digit=0을 취합니다.
-
초기 카운트를 0으로 합니다.
-
길이가 1이면 한 자리만 존재합니다. 정수로 변환, digit=(str.at(0)-'0'). 8로 나눌 수 있는지 확인하고 결과를 1 또는 0으로 반환합니다.
-
길이가 2이면 두 자리만 존재합니다. 이를 정수로 변환합니다. part_1=(str.at(0)- '0') 및 part_2 =(str[1] - '0') * 10 + (str[0] - '0'). 8로 나눌 수 있는지 확인하고 결과를 1 또는 0으로 반환합니다.
-
그렇지 않으면 길이가 3자리보다 크거나 같으면 for 루프를 사용하여 i=0에서 i=length-1까지 문자열을 순회하고 digit =(str[i] - '0') * 100 +에 의해 세 문자를 정수 값으로 변환합니다. (문자열[i + 1] - '0') * 10 + (문자열[i + 2] - '0'); . 숫자의 값이 8 증분 카운트로 나누어지는 경우.
-
digit =(str[length - 1] - '0') * 100 + (str[0] - '0') * 10 + (str[1을 사용하여 마지막 숫자와 처음 두 숫자로 구성된 쌍에 대해 위와 동일한 프로세스를 수행합니다. ] - '0');
-
8로 나눌 수 있는지 확인하고 개수를 업데이트합니다.
-
마지막에 결과로 카운트를 반환합니다.
예시
#include <bits/stdc++.h> using namespace std; int Rotation_8(long long num){ string str = to_string(num); int length = str.length(); int digit = 0, count = 0; if (length == 1){ if(digit % 8 == 0){ return 1; } else{ return 0; } } else if(length == 2){ int part_1 = (str[0] - '0') * 10 + (str[1] - '0'); int part_2 = (str[1] - '0') * 10 + (str[0] - '0'); if (part_1 % 8 == 0){ count++; } if (part_2 % 8 == 0){ count++; } return count; } else{ for(int i = 0; i < (length - 2); i++){ digit = (str[i] - '0') * 100 + (str[i + 1] - '0') * 10 + (str[i + 2] - '0'); if (digit % 8 == 0){ count++; } } } digit = (str[length - 1] - '0') * 100 + (str[0] - '0') * 10 + (str[1] - '0'); if(digit % 8 == 0){ count++; } digit = (str[length - 2] - '0') * 100 + (str[length - 1] - '0') * 10 + (str[0] - '0'); if(digit%8 == 0){ count++; } return count; } int main(){ long long num = 24040; cout<<"Count of rotations divisible by 8 are: "<<Rotation_8(num); return 0; }
출력
위의 코드를 실행하면 다음 출력이 생성됩니다 -
Count of rotations divisible by 8 are: 3