C++實(shí)現(xiàn)水仙花數(shù)判斷實(shí)例
前言
水仙花數(shù)(Narcissistic number)也被稱為超完全數(shù)字不變數(shù)(pluperfect digital invariant, PPDI)或阿姆斯特朗數(shù)(Armstrong number),是指一個 3 位數(shù),它的每個位上的數(shù)字的 3次冪之和等于它本身。例如:1^3 + 5^3+ 3^3 = 153。
找出指定范圍內(nèi)的所有水仙花數(shù)需要我們利用循環(huán)的相關(guān)知識解決,本文將從思路分析入手,帶大家逐步簡化問題,直到代碼實(shí)現(xiàn)。
一、思路分析
如果一個數(shù)是水仙花數(shù),那么它的每個位上的數(shù)字的 3次冪之和等于它本身,因此我們需要分離出它各個位置上的數(shù)字,并對他們的三次冪求和,與原數(shù)相等即可。
問題就簡化為了分離各個位置上的數(shù),對于百位,我們可以知道,因為數(shù)據(jù)類型為 int 整型,因此原數(shù)除以100即為百位數(shù);對于十位,將原數(shù)模100后,除以10即可;對于個位,模10即可獲得。
到此,整體思路已經(jīng)明確,我們將其轉(zhuǎn)化為代碼。
二、代碼實(shí)現(xiàn)
1.水仙花函數(shù)
我們首先來寫一個函數(shù),這個函數(shù)的功能是判斷一個數(shù)是否為水仙花數(shù),如果是,返回真;否則,返回假。
代碼如下(示例):
/* Alkaid#3529 */
bool narcissus(int a)
{
int sum = 0; // 記錄最終求和結(jié)果
int x1 = a / 100; // 原數(shù)除以100即為百位
int x2 = a % 100 / 10; // 原數(shù)模100后,除以10就是十位數(shù)
int x3 = a % 10; // 模10的結(jié)果就是個位數(shù)
// 對得到的各位數(shù)的三次冪求和
sum = x1 * x1 * x1 + x2 * x2 * x2 + x3 * x3 * x3;
// 判斷求和結(jié)果與原數(shù)是否相等
if (sum == a)
return 1;
else
return 0;
}
2.完整代碼
在現(xiàn)有函數(shù)基礎(chǔ)上,我們只需對所有三位數(shù)循環(huán)判斷,若為真,輸出;否則,跳過即可。
代碼如下(示例):
/* Alkaid#3529 */
#include<iostream>
using namespace std;
bool narcissus(int a);
int main()
{
cout << "水仙花數(shù)有: ";
// 從100開始,逐個檢查所有三位數(shù)
for (int i = 100; i < 1000; i++)
{
if (narcissus(i))
cout << i << " ";
}
return 0;
}
bool narcissus(int a)
{
int sum = 0; // 記錄最終求和結(jié)果
int x1 = a / 100; // 原數(shù)除以100即為百位
int x2 = a % 100 / 10; // 原數(shù)模100后,除以10就是十位數(shù)
int x3 = a % 10; // 模10的結(jié)果就是個位數(shù)
// 對得到的各位數(shù)的三次冪求和
sum = x1 * x1 * x1 + x2 * x2 * x2 + x3 * x3 * x3;
// 判斷求和結(jié)果與原數(shù)是否相等
if (sum == a)
return 1;
else
return 0;
}
我們運(yùn)行一下程序,看看結(jié)果如何。

經(jīng)檢驗,代碼運(yùn)行無誤,結(jié)果正確,可以放心復(fù)制粘貼。
總結(jié)
水仙花數(shù)的判斷是常見的基礎(chǔ)題型,除此之外,后續(xù)會陸續(xù)推出 C++ 的進(jìn)階題目,感興趣且想學(xué)習(xí)的話不妨點(diǎn)點(diǎn)關(guān)注,你的點(diǎn)贊是我更新的最大動力哦!
到此這篇關(guān)于C++實(shí)現(xiàn)水仙花數(shù)判斷實(shí)例的文章就介紹到這了,更多相關(guān)C++水仙花數(shù)判斷內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
基于OpenCV自定義色條實(shí)現(xiàn)灰度圖上色功能代碼
今天通過本文給大家分享基于OpenCV自定義色條實(shí)現(xiàn)灰度圖上色功能代碼,代碼簡單易懂,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧2021-11-11
解析C++編程中virtual聲明的虛函數(shù)以及單個繼承
這篇文章主要介紹了C++編程中virtual聲明的虛函數(shù)以及單個繼承,剖析虛函數(shù)和單個基類所能夠繼承的成員,要的朋友可以參考下2016-01-01
C語言數(shù)據(jù)結(jié)構(gòu)與算法之鏈表(一)
鏈表是線性表的鏈?zhǔn)酱鎯Ψ绞?。鏈表的?nèi)存是不連續(xù)的,前一個元素存儲地址的下一個地址中存儲的不一定是下一個元素。小編今天就將帶大家深入了解一下鏈表,快來學(xué)習(xí)吧2021-12-12
C語言進(jìn)階教程之字符串&內(nèi)存函數(shù)
對于字符,在計算機(jī)內(nèi)部都是用數(shù)字(字符編碼)來表示的,而字符串是“字符連續(xù)排列”的一種表現(xiàn),這篇文章主要給大家介紹了關(guān)于C語言進(jìn)階教程之字符串&內(nèi)存函數(shù)的相關(guān)資料,需要的朋友可以參考下2021-09-09
c++?創(chuàng)建型設(shè)計模式工廠方法Factory?Method示例詳解
這篇文章主要為大家介紹了c++?創(chuàng)建型設(shè)計模式工廠方法Factory?Method示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09
數(shù)據(jù)結(jié)構(gòu)之帶頭結(jié)點(diǎn)的單鏈表
單鏈表是一種鏈?zhǔn)酱嫒〉臄?shù)據(jù)結(jié)構(gòu),用一組地址任意的存儲單元存放線性表中的數(shù)據(jù)元素。鏈表中的數(shù)據(jù)是以結(jié)點(diǎn)來表示的,每個結(jié)點(diǎn)的構(gòu)成:數(shù)據(jù)域(數(shù)據(jù)元素的映象)?+?指針域(指示后繼元素存儲位置),元素就是存儲數(shù)據(jù)的存儲單元,指針就是連接每個結(jié)點(diǎn)的地址數(shù)據(jù)2023-07-07
詳解設(shè)計模式中的中介者模式在C++編程中的運(yùn)用
這篇文章主要介紹了設(shè)計模式中的中介者模式在C++編程中的運(yùn)用,中介者模式將對象間的通信封裝到一個類中,將多對多的通信轉(zhuǎn)化為一對多的通信,降低了系統(tǒng)的復(fù)雜性,需要的朋友可以參考下2016-03-03

