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
广告
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP