숫자 'n'이 주어지면 주어진 숫자가 Strong Number인지 여부를 확인해야 합니다.
강한 숫자는 모든 자릿수' 계승의 합이 숫자 'n'과 같은 숫자입니다. 계승은 해당 숫자를 포함하여 해당 숫자 아래에 있는 모든 숫자의 곱을 찾을 때를 의미하며 !로 표시됩니다. (느낌표), 예:4! =4x3x2x1 =24.
따라서 숫자가 강한지 여부를 찾으려면 숫자가 145인 것처럼 숫자의 모든 자릿수를 선택해야 합니다. 그런 다음 1, 4 및 5를 선택해야 합니다. 이제 각 숫자의 계승을 찾을 수 있습니다. 즉, 1입니다! =1, 4! =24, 5! =120.
이제 우리는 1 + 24 + 120을 합산하여 145를 얻습니다. 이는 주어진 입력과 정확히 동일하므로 숫자가 강한 숫자라고 말할 수 있습니다.
예시
Input: n = 124 Output: No it is not a strong number Explanation: 1! + 2! + 4! = 27 which is not equal to n i.e, 124 Input: n = 145 Output: Yes it is a strong number Explanation: 1! + 4! + 5! = 145
문제를 해결하기 위해 다음과 같은 접근 방식을 사용합니다. -
우리는 -
- 단위 자릿수에서 시작하여 각 자리수를 취해 계승을 구합니다.
- 각 숫자의 계승을 추가합니다.
- 결과를 원래 숫자와 비교합니다. 같으면 숫자가 강한 숫자입니다. 그렇지 않으면 숫자가 강한 숫자가 아닙니다.
알고리즘
START In Function int factorial(int r) Step1 -> Initialize int fact and set as 1 Step2-> Loop while r>1 Set fact as fact * r Decremnet r by 1 End Loop Step 3-> Return fact End Function factorial In Function int check(int n) Step 1-> Initialize int temp, rem and result, set result as 0 Step 2-> Set temp as n Step 3-> Loop while temp Set rem as temp % 10 Set result as result + factorial(rem) Set temp as temp/10 End loop Step 4-> If result == n then, Return 1 Step 5-> Else Return 0 End function check In main(int argc, char const *argv[]) Step 1-> Initialise and set n as 145 Step 2->If check(n) is valid then, Print "Yes it is a strong number” Step 3-> Else Print "no it is not a strong number” STOP
예시
#include <stdio.h> int factorial(int r) { int fact = 1; while(r>1) { fact = fact * r; r--; } return fact; } int check(int n) { int temp, rem, result = 0; temp = n; while(temp) { rem = temp % 10; result = result + factorial(rem); temp = temp/10; } if (result == n) return 1; else return 0; } int main(int argc, char const *argv[]) { int n = 145; if (check(n)) printf("Yes it is a strong number\n"); else printf("no it is not a strong number\n"); return 0; }
위의 코드를 실행하면 다음 출력이 생성됩니다 -
Yes it is a strong number