C++ 中计算从 2 到 N/2 所有基数下数字 N 的各位数字之和


在这个问题中,我们给定一个数字 N。我们的任务是创建一个程序来查找数字 N 从 2 到 N/2 的所有基数下的各位数字之和。

因此,我们必须将数字的基数转换为从 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

更新于: 2020-08-06

120 次浏览

开启您的 职业生涯

完成课程获得认证

开始学习
广告