이 문제에서 숫자 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