Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 2부터 N/2까지 모든 진법으로 작성된 숫자 N의 자릿수 합


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