利用c++判斷水仙花數(shù)并輸出示例代碼
更新時間:2025年12月13日 11:23:07 作者:ULTRA??
水仙花數(shù)是指一個三位數(shù),其各位數(shù)字的立方和恰好等于該數(shù)本身,這篇文章主要介紹了利用c++判斷水仙花數(shù)并輸出的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
以下是使用C++實現(xiàn)的相同邏輯代碼:
#include <iostream>
#include <vector>
#include <string>
#include <cmath>
// 判斷一個數(shù)是否為水仙花數(shù)
bool isNarcissistic(int n) {
std::string numStr = std::to_string(n);
int numDigits = numStr.length();
int sum = 0;
// 遍歷每一位數(shù)字
for (int i = 0; i < numDigits; i++) {
// 將字符數(shù)字轉(zhuǎn)換為整數(shù)
int digit = numStr[i] - '0';
// 計算該位數(shù)字的 n 次冪并累加
sum += static_cast<int>(std::pow(digit, numDigits));
}
// 判斷總和是否等于原數(shù)
return sum == n;
}
// 查找指定范圍內(nèi)的水仙花數(shù)
std::vector<int> findNarcissisticNumbers(int min, int max) {
std::vector<int> results;
for (int i = min; i <= max; i++) {
if (isNarcissistic(i)) {
results.push_back(i);
}
}
return results;
}
int main() {
// 輸出所有3位水仙花數(shù)(100-999)
std::vector<int> narcissisticNumbers = findNarcissisticNumbers(100, 999);
// 格式化輸出
if (!narcissisticNumbers.empty()) {
std::cout << "3位水仙花數(shù)有:" << std::endl;
for (int num : narcissisticNumbers) {
std::cout << num << std::endl;
}
} else {
std::cout << "該范圍內(nèi)沒有水仙花數(shù)" << std::endl;
}
return 0;
}
以下是使用純數(shù)學運算(不用字符串轉(zhuǎn)換)的替代版本:
#include <iostream>
#include <vector>
// 判斷一個數(shù)是否為水仙花數(shù)(純數(shù)學方法)
bool isNarcissistic(int n) {
int original = n;
int numDigits = 0;
int temp = n;
// 計算位數(shù)
while (temp > 0) {
numDigits++;
temp /= 10;
}
int sum = 0;
temp = original;
// 遍歷每一位數(shù)字
while (temp > 0) {
int digit = temp % 10;
// 計算digit的numDigits次冪
int power = 1;
for (int i = 0; i < numDigits; i++) {
power *= digit;
}
sum += power;
temp /= 10;
}
// 判斷總和是否等于原數(shù)
return sum == original;
}
// 查找指定范圍內(nèi)的水仙花數(shù)
std::vector<int> findNarcissisticNumbers(int min, int max) {
std::vector<int> results;
for (int i = min; i <= max; i++) {
if (isNarcissistic(i)) {
results.push_back(i);
}
}
return results;
}
int main() {
// 輸出所有3位水仙花數(shù)(100-999)
std::vector<int> narcissisticNumbers = findNarcissisticNumbers(100, 999);
// 格式化輸出
if (!narcissisticNumbers.empty()) {
std::cout << "3位水仙花數(shù)有:" << std::endl;
for (int num : narcissisticNumbers) {
std::cout << num << std::endl;
}
} else {
std::cout << "該范圍內(nèi)沒有水仙花數(shù)" << std::endl;
}
return 0;
}
兩個版本的功能相同,都能正確找到153、370、371、407這4個3位水仙花數(shù)。第一個版本更接近原Lua代碼的邏輯,使用字符串處理;第二個版本使用純數(shù)學運算,在某些情況下性能更好。
總結
到此這篇關于利用c++判斷水仙花數(shù)并輸出的文章就介紹到這了,更多相關c++判斷水仙花數(shù)并輸出內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:
相關文章
VisualStudio2022下配置 OpenMP多線程編程環(huán)境與運行
本文主要介紹了VisualStudio2022下配置 OpenMP多線程編程環(huán)境與運行,文中通過圖文介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2024-06-06
C++使用MySQL-Connector/C++連接MySQL出現(xiàn)LNK2019錯誤的解決方法
這篇文章主要介紹了C++使用MySQL-Connector/C++連接MySQL出現(xiàn)LNK2019錯誤的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-03-03

