利用c++判斷水仙花數(shù)并輸出示例代碼
以下是使用C++實(shí)現(xiàn)的相同邏輯代碼:
#include <iostream>
#include <vector>
#include <string>
#include <cmath>
// 判斷一個(gè)數(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';
// 計(jì)算該位數(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)沒(méi)有水仙花數(shù)" << std::endl;
}
return 0;
}
以下是使用純數(shù)學(xué)運(yùn)算(不用字符串轉(zhuǎn)換)的替代版本:
#include <iostream>
#include <vector>
// 判斷一個(gè)數(shù)是否為水仙花數(shù)(純數(shù)學(xué)方法)
bool isNarcissistic(int n) {
int original = n;
int numDigits = 0;
int temp = n;
// 計(jì)算位數(shù)
while (temp > 0) {
numDigits++;
temp /= 10;
}
int sum = 0;
temp = original;
// 遍歷每一位數(shù)字
while (temp > 0) {
int digit = temp % 10;
// 計(jì)算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)沒(méi)有水仙花數(shù)" << std::endl;
}
return 0;
}
兩個(gè)版本的功能相同,都能正確找到153、370、371、407這4個(gè)3位水仙花數(shù)。第一個(gè)版本更接近原Lua代碼的邏輯,使用字符串處理;第二個(gè)版本使用純數(shù)學(xué)運(yùn)算,在某些情況下性能更好。
總結(jié)
到此這篇關(guān)于利用c++判斷水仙花數(shù)并輸出的文章就介紹到這了,更多相關(guān)c++判斷水仙花數(shù)并輸出內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
利用Matlab復(fù)刻兩款粒子愛(ài)心動(dòng)畫(huà)效果
最近電視劇《點(diǎn)燃我,溫暖你》大火,蹭一下熱度,發(fā)一下MATLAB畫(huà)愛(ài)心的代碼,寫(xiě)的比較隨意,大家可以自行調(diào)整粒子大小和顏色啥的2022-11-11
c語(yǔ)言?數(shù)據(jù)存儲(chǔ)與原碼?反碼?補(bǔ)碼詳細(xì)解析
不知道你是否和我一樣好奇,學(xué)習(xí)編程語(yǔ)言的同時(shí)想,各個(gè)數(shù)據(jù)類型是怎樣在我們的內(nèi)存中儲(chǔ)存的呢,如果你仔細(xì)深入了解的話,你會(huì)了解其中的樂(lè)趣,了解科學(xué)家們的偉大,了解c語(yǔ)言2022-02-02
C語(yǔ)言實(shí)現(xiàn)兩個(gè)矩陣相乘
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)兩個(gè)矩陣相乘的程序,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-05-05
C語(yǔ)言實(shí)現(xiàn)個(gè)人財(cái)務(wù)管理
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)個(gè)人財(cái)務(wù)管理,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11

