在C++中查找数字根为X的第N个正数

在这个问题中,我们给出了两个整数值 N 和 X。 我们的任务是创建一个程序来找到第 N 个正数,其数字根是 X。

数字根 (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 正数,其数字根为 "<<X<<" is "<<calcNthDigitalRoot(X, N);

   return 0;

}

输出结果
5th 正数,其数字根为 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 正数,其数字根为 "<<X<<" is "<<calcNthDigitalRoot(X, N);

   return 0;

}

输出结果
12th 正数,其数字根为 4 is 103

以上是 在C++中查找数字根为X的第N个正数 的全部内容, 来源链接: utcz.com/z/349121.html

回到顶部