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
广告