在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