이 문제에서 숫자 N이 주어졌습니다. 우리의 임무는 2에서 N/2까지의 기수에서 숫자 N의 자릿수 합을 찾는 프로그램을 만드는 것입니다.
그래서, 우리는 숫자의 밑을 2에서 N/2로 모든 밑으로 변환해야 합니다. 즉, n =9의 경우 밑은 2, 3, 4가 됩니다. 그리고 이 밑에서 모든 숫자의 합을 찾습니다.
문제를 이해하기 위해 예를 들어보겠습니다.
입력
N = 5
출력
2
설명
base from 2 to N/2 is 2. 52 = 101, sum of digits is 2.
이 문제를 해결하기 위해 2에서 N/2까지의 모든 수를 밑수로 취합니다. 그런 다음 자릿수 합계를 계산하기 위해 N을 밑수로 반복해서 나누어야 합니다. 즉, N =N/base이고 나머지 값을 합계에 더합니다. 그런 다음 각 염기에 대해 찾은 합계 값을 추가하여 결과를 얻습니다.
예시
우리 솔루션의 작동을 설명하는 프로그램 -
#include <iostream> using namespace std; int findBaseSum(int n, int base, int &sum){ while (n > 0) { sum += n % base; n /= base; } return sum; } void CalcSumOfBaseDigits(int n, int &sum){ for (int base = 2; base <= n / 2; base++) findBaseSum(n, base, sum); } int main(){ int N = 11; int sum = 0; CalcSumOfBaseDigits(N, sum); cout<<"The sum of digits of "<<N<<" written in all bases from 2 to "<<(N/2)<<" is "<<sum; return 0; }
출력
The sum of digits of 11 written in all bases from 2 to 5 is 14