在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

更新于:2021年3月13日

110 次浏览

开启你的职业生涯

通过完成课程获得认证

开始学习
广告