C++中计算数字之和等于给定和的n位数的个数


给定一个正数作为位数和一个和。目标是找到所有位数为d且数字之和等于输入和的数字。不考虑前导零的数字。

范围是1到100之间的数字,和是1到500之间。

让我们通过例子来理解。

例如

输入 - 位数 = 3,数字和 = 3

输出 - 数字之和等于给定和的n位数的个数为:6

解释 - 三位数且数字之和为3的数字是

102, 111, 120, 201, 210, 和 300。

输入 - 位数 = 4,数字和 = 2

输出 - 数字之和等于给定和的n位数的个数为:4

解释 - 四位数且数字之和为2的数字是

1001, 1010, 1100, 和 2000。

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

在这种方法中,我们将从第一个d位数开始遍历,并找到数字之和等于给定和的第一个数字。然后将数字递增9,直到找到数字之和大于给定和的数字。一旦找到一个数字之和大于输入和的数字,则将数字递增1,并找到下一个数字之和等于输入和的数字。重复此过程,直到最后一个d位数。

  • 将位数和数字和作为输入。
  • 函数`digits_sum(int digits, int digi_sum)`接收两个输入值,并返回数字之和等于给定和的n位数的个数。
  • 将初始计数设为0。
  • 将第一个数字设为`Left = pow(10, digits - 1)`。并将范围的最后一个数字设为`right = pow(10, digits) - 1`(例如,对于digits=2,为10和99)。
  • 使用while循环从左到右遍历。
  • 将`first=0`和`last=i`。
  • 对于每个i(last),取最右边的数字(last % 10)并添加到first。对于下一次迭代,将last减少10。
  • 如果first等于digi_sum,则递增计数,并将i更新为i+9,进行下一次迭代。
  • 否则,将i递增1。
  • 在所有循环结束后,计数将是数字之和等于digi_sum的数字个数。
  • 返回计数作为结果。

示例

在线演示

#include <bits/stdc++.h>
using namespace std;

int digits_sum(int digits, int digi_sum) {
   int count = 0;
   int Left = pow(10, digits - 1);
   int right = pow(10, digits) - 1;
   int i = Left;
   while (i <= right) {
      int first = 0;
      int last = i;
      while (last != 0) {
         first = first + last % 10;
         last = last / 10;
      }
      if (first == digi_sum) {
         count++;
         i = i + 9;
      } else {
         i++;
      }
   }
   return count;
}
int main() {
   int digits = 5;
   int digi_sum = 7;
   cout << "Count of n digit numbers whose sum of digits equals to given sum are: " << digits_sum(digits, digi_sum);
   return 0;
}

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

输出

Count of n digit numbers whose sum of digits equals to given sum are: 5

更新于:2021年1月29日

326 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告