用给定的数字根在范围内查找数字的 C++ 程序
其数字之和可求出一个数的数字根;如果和是一位数,则它是数字根。在本教程中,我们将讨论一个问题,给定一个数字范围和一个整数X,我们需要计算该范围内有多少个数字具有数字根作为X,其中X是个位数,例如
Input: l = 13, r = 25, X = 4 Output: 2 Explanation: Numbers in the range (13,25) having digit sum 4 are 13 and 22. Input: l = 11, r = 57 Output: 6
寻找解决方案的方法
简单的方法
在一个简单的方法中,我们可以遍历从l到r的数字并检查其总和是否等于X。但这会产生时间复杂度,O(N)其中N是范围内的总数。
有效的方法
要在数字根为X的范围内查找数字,因此我们需要检查该范围内每个数字的数字总和是否等于K,数字总和始终等于num%9,如果余数为9为0,所以如果X=9则将其更改为0。
求数的个数,将整个范围分成9个组。那么每组中将恰好有一个模9等于X的数字。之后,检查不在组中的被遗漏的数字;分别检查每个数字以满足num%9=X的条件。
示例
上述方法的C++代码
#include <bits/stdc++.h> #define ll long long int using namespace std; int main(){ int l = 13; int r = 25; int X = 4; if (X == 9) X = 0; //计算范围内的所有数字 int total = r - l + 1; //将数字分成最多9个组 int groups = total/ 9; //因为对于N组,将有N个数字,模9等于X。 int result = groups; //检查所有遗漏的数字 int left_out = total % 9; //分别检查每个遗漏的数字是否符合条件。 for (int i = r; i > r - left_out; i--) { int rem = i % 9; if (rem == X) result++; } cout << "Total Numbers in a Range( l, r ) with given Digital Root(X) are: " << result; return 0; }输出结果
Total Numbers in a Range( l, r ) with given Digital Root(X) are: 2
结论
在本教程中,我们讨论了一个数字范围和数字根的问题。我们需要找到所有具有数字根的数字,X.We这是通过将数字分成9位数字组来解决此问题的一种简单方法和有效方法。
每组包含一个数字根为X的数字。我们还讨论了针对这个问题的C++程序,我们可以使用C、Java、Python等编程语言来完成。我们希望本教程对您有所帮助。