우리는 많은 수를 받습니다. 목표는 4로 나눌 수 있는 num의 회전 수를 계산하는 것입니다.
회전을 반복해서 수행할 수 없기 때문입니다. 우리는 4로 나눌 수 있는 속성을 사용할 것입니다. 마지막 두 자리가 4로 나누어 떨어지면 그 숫자는 4로 나누어집니다. 숫자가 1234이면 회전은 1234, 4123, 3412, 2341이 되며 그 중 3412는 마지막 두 자리 12와 같이 4로 나눌 수 있습니다. 4로 나눌 수 있습니다.
예를 들어 이해합시다.
입력 - 숫자=15324
출력 − 4로 나눌 수 있는 회전 수는 다음과 같습니다. 2
설명 − 회전은 −
15324, 41532, 24153, 32415, 53241
이 중 15324와 41532는 4의 배수가 됩니다.
입력 - 숫자=848484
출력 − 4로 나눌 수 있는 회전 수는 − 6입니다.
설명 − 회전은 −
848484, 484848, 848484, 484848, 848484, 484848
이 모든 회전은 4로 나눌 수 있습니다.
아래 프로그램에서 사용한 접근 방식은 다음과 같습니다.
숫자를 문자열로 변환하고 for 루프를 사용하여 숫자를 탐색합니다. 두 자리의 각 쌍에 대해 정수로 변환하고 4로 나누어지는지 확인합니다. 나눌 수 있는 경우 개수를 증가시킵니다.
-
긴 숫자만큼 숫자를 가져옵니다.
-
Rotation_4(long long num) 함수는 숫자 num을 받아 4로 나눌 수 있는 num의 회전 수를 반환합니다.
-
숫자를 문자열 str=to_string(num)으로 변환합니다.
-
num의 자릿수는 length=str.length()입니다.
-
숫자 쌍의 정수 값을 저장하기 위해 임시 변수 digit=0을 사용합니다.
-
초기 카운트를 0으로 합니다.
-
길이가 1이면 한 자리만 존재합니다. 정수로 변환, digit=(str.at(0)-'0')
-
4로 나눌 수 있는지 확인하고 결과를 1 또는 0으로 반환합니다.
-
이제 i=0에서 I
까지 for 루프를 사용하여 str을 탐색합니다. -
digit=(str.at(i)-'0')*10 + (str.at(i+1)-'0')을 사용하여 두 자리 숫자를 만드십시오. 각 쌍은 회전의 마지막 두 자리가 되기 때문입니다.피>
-
digit=(str.at(length-1)-'0')*10 + (str.at(0)-'0'); 4로 나눌 수 있는지 확인하고 개수를 업데이트합니다.
-
결국 결과로 카운트를 반환합니다.
예시
#include <bits/stdc++.h> using namespace std; int Rotation_4(long long num){ string str = to_string(num); int length = str.length(); int digit = 0, count = 0; if (length == 1){ digit=(str.at(0)-'0'); if(digit%4 == 0){ return 1; } else{ return 0; } } for (int i=0; i<(length-1); i++){ digit = (str.at(i)-'0')*10 + (str.at(i+1)-'0'); if(digit%4 == 0){ count++; } } digit = (str.at(length-1)-'0')*10 + (str.at(0)-'0'); if(digit%4 == 0){ count++; } return count; } int main(){ long long num = 24040; cout<<"Count of rotations divisible by 4 are: "<<Rotation_4(num); return 0; }
출력
위의 코드를 실행하면 다음 출력이 생성됩니다 -
Count of rotations divisible by 4 are: 4