在C ++中满足m + sum(m)+ sum(sum(m))= N的数字计数

给定数字N作为输入。目标是找到满足以下条件的m到N。这里N <= 10 9

m + sum(m)+ sum(sum(m))=N。其中sum(m)m是数字的总和。

如果m为137,则sum(m)= 1 + 3 + 7 = 11且sum(sum(m))= sum(11)= 1 + 1 = 2

让我们通过示例来理解。

例如

输入-N = 27

输出-满足m + sum(m)+ sum(sum(m))= N的数字计数是:3

说明-这些数字是:

9(9 + 9 + 9 = 27)

15(15 +(1 + 5)+(6)= 27)

21(21 +(2 + 1)+(3)= 27)

输入-N = 81

输出-满足m + sum(m)+ sum(sum(m))= N的数字计数为:2

说明-这些数字是:

63(63 +(6 + 3)+ 9 = 81)

66(66 +(6 + 6)+(1 + 2)= 81)

以下程序中使用的方法如下

在这种方法中,我们将计算数字的总和,并将相加后的总和与N进行比较。如果计算出的总和等于N,则增加计数。最后返回结果作为计数。

由于最大数字可以是10 ,因此m的最大位数可以为81(9 * 9),并且sum(sum(m))的下一个最大位数可以为16(79的7 + 9)。因此,我们将检查从N-97到N的数字,它们是小于N-97且大于N的整数将不满足给定条件。 

  • 以整数N作为输入。

  • 函数total(int num)取一个总数,并返回其数字的总和。

  • 将res_total作为数字的总和,然后将res作为当前余数。都用0初始化。

  • 使用while循环遍历每个单位数字。

  • 将单位数字作为res = num%10并添加到res_total。

  • 将num减少10以表示下一位数字。

  • 返回res_total作为末尾num的位数之和。

  • 函数condition(int N)取N并返回满足m + sum(m)+ sum(sum(m))的数字的计数。

  • 将初始计数设为0。

  • 使用for循环从i = N-97到i <= N遍历。 

  • 计算数字总和为temp_1 = total(i)。

  • 计算的数字总和total(i)为(temp_1)。

  • 设置temp_3 = i + temp_1 + temp_2。如果等于N,则增加计数。

  • 在for循环结束时,将返回计数作为结果。

示例

#include <bits/stdc++.h>

using namespace std;

int total(int num) {

   int res_total = 0;

   int res = 0;

   while (num > 0) {

      res = num % 10;

      res_total = res_total + res;

      num = num / 10;

   }

   return res_total;

}

int condition(int N) {

   int count = 0;

   for (int i = N - 97; i <= N; i++) {

      int temp_1 = total(i);

      int temp_2 = total(temp_1);

      int temp_3 = i + temp_1 + temp_2;

      if (temp_3 == N) {

         count++;

      }

   }

   return count;

}

int main() {

   int N = 9999;

   cout << "Count of numbers satisfying m + sum(m) + sum(sum(m)) = N are: " << condition(N);

   return 0;

}

如果我们运行上面的代码,它将生成以下输出-

输出结果

Count of numbers satisfying m + sum(m) + sum(sum(m)) = N are: 2

以上是 在C ++中满足m + sum(m)+ sum(sum(m))= N的数字计数 的全部内容, 来源链接: utcz.com/z/320058.html

回到顶部