在C++中查找数字根为X的第N个正数
在这个问题中,我们得到了两个整数N和X。我们的任务是创建一个程序来查找数字根为X的第N个正数。
**数字根(X)**是一个个位的正数,它是通过递归地将N的数字相加,直到和变成个位数而得到的。
让我们来看一个例子来理解这个问题:
输入
N = 5, X = 4
输出
40
解决方案方法
解决这个问题的一个简单方法是计算数字根为X的数字个数。为此,我们将从1开始,然后检查当前数字的数字根是否等于X,并计数这些数字,然后返回第N个这样的数字。
程序说明了我们解决方案的工作原理:
示例
#include <iostream>
using namespace std;
int calcDigitalRoot(int num) {
int digitSum = 1000, number = num;
while (digitSum >= 10) {
digitSum = 0;
while (number > 0) {
digitSum += number % 10;
number /= 10;
}
number = digitSum;
}
return digitSum;
}
int calcNthDigitalRoot(int X, int N) {
int countDigitalRootVals = 0;
for (int i = 1; countDigitalRootVals < N; ++i) {
int digitalRoot = calcDigitalRoot(i);
if (digitalRoot == X) {
++countDigitalRootVals;
}
if (countDigitalRootVals == N)
return i;
}
return -1;
}
int main(){
int X = 4, N = 5;
cout<<N<<"th positive number whose digital root is "<<X<<" is "<<calcNthDigitalRoot(X, N);
return 0;
}输出
5th positive number whose digital root is 4 is 40
高效方法
解决这个问题的一个高效方法是使用直接公式找到数字根等于X的第N个数,公式为:
Nth number = (N + 1)*9 + X
程序说明了我们解决方案的工作原理:
示例
#include <iostream>
using namespace std;
int calcNthDigitalRoot(int X, int N) {
int nthNumber = (((N - 1) * 9) + X);
return nthNumber;
}
int main() {
int X = 4, N = 12;
cout<<N<<"th positive number whose digital root is "<<X<<" is "<<calcNthDigitalRoot(X, N);
return 0;
}输出
12th positive number whose digital root is 4 is 103
广告
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP