C++實(shí)現(xiàn)水仙花數(shù)判斷實(shí)例
前言
水仙花數(shù)(Narcissistic number)也被稱為超完全數(shù)字不變數(shù)(pluperfect digital invariant, PPDI)或阿姆斯特朗數(shù)(Armstrong number),是指一個(gè) 3 位數(shù),它的每個(gè)位上的數(shù)字的 3次冪之和等于它本身。例如:1^3 + 5^3+ 3^3 = 153。
找出指定范圍內(nèi)的所有水仙花數(shù)需要我們利用循環(huán)的相關(guān)知識(shí)解決,本文將從思路分析入手,帶大家逐步簡(jiǎn)化問(wèn)題,直到代碼實(shí)現(xiàn)。
一、思路分析
如果一個(gè)數(shù)是水仙花數(shù),那么它的每個(gè)位上的數(shù)字的 3次冪之和等于它本身,因此我們需要分離出它各個(gè)位置上的數(shù)字,并對(duì)他們的三次冪求和,與原數(shù)相等即可。
問(wèn)題就簡(jiǎn)化為了分離各個(gè)位置上的數(shù),對(duì)于百位,我們可以知道,因?yàn)閿?shù)據(jù)類型為 int 整型,因此原數(shù)除以100即為百位數(shù);對(duì)于十位,將原數(shù)模100后,除以10即可;對(duì)于個(gè)位,模10即可獲得。
到此,整體思路已經(jīng)明確,我們將其轉(zhuǎn)化為代碼。
二、代碼實(shí)現(xiàn)
1.水仙花函數(shù)
我們首先來(lái)寫一個(gè)函數(shù),這個(gè)函數(shù)的功能是判斷一個(gè)數(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é)果就是個(gè)位數(shù)
// 對(duì)得到的各位數(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ǔ)上,我們只需對(duì)所有三位數(shù)循環(huán)判斷,若為真,輸出;否則,跳過(guò)即可。
代碼如下(示例):
/* Alkaid#3529 */
#include<iostream>
using namespace std;
bool narcissus(int a);
int main()
{
cout << "水仙花數(shù)有: ";
// 從100開(kāi)始,逐個(gè)檢查所有三位數(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é)果就是個(gè)位數(shù)
// 對(duì)得到的各位數(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),代碼運(yùn)行無(wú)誤,結(jié)果正確,可以放心復(fù)制粘貼。
總結(jié)
水仙花數(shù)的判斷是常見(jiàn)的基礎(chǔ)題型,除此之外,后續(xù)會(huì)陸續(xù)推出 C++ 的進(jìn)階題目,感興趣且想學(xué)習(xí)的話不妨點(diǎn)點(diǎn)關(guān)注,你的點(diǎn)贊是我更新的最大動(dòng)力哦!
到此這篇關(guān)于C++實(shí)現(xiàn)水仙花數(shù)判斷實(shí)例的文章就介紹到這了,更多相關(guān)C++水仙花數(shù)判斷內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++用函數(shù)對(duì)算法性能進(jìn)行測(cè)試
算法無(wú)處不在,算法是程序的靈魂,而數(shù)據(jù)結(jié)構(gòu)則是程序的骨架,二者共同構(gòu)成了程序,那么如何評(píng)估算法的性能呢?理論上可以通過(guò)計(jì)算時(shí)間復(fù)雜度的方法來(lái)評(píng)估,但這是理性的認(rèn)識(shí),我們還有一種直觀的評(píng)估方法,那就是程序執(zhí)行的時(shí)間2022-08-08
C++程序內(nèi)存棧區(qū)與堆區(qū)模型案例分析
一直以來(lái)總是對(duì)這個(gè)問(wèn)題的認(rèn)識(shí)比較朦朧,我相信很多朋友也是這樣的,總是聽(tīng)到內(nèi)存一會(huì)在棧上分配,一會(huì)又在堆上分配,那么它們之間到底是怎么的區(qū)別呢,讓我們一起來(lái)看看2022-03-03
C++深入探索類真正的形態(tài)之struct與class
前邊我們所定義的類,均是使用struct關(guān)鍵字來(lái)定義,但是C++中真正用于定義類的關(guān)鍵字為class,因?yàn)橐狢++兼容C,所以保留struct關(guān)鍵字,struct與class的用法完全相同2022-04-04
C++計(jì)算ICMP頭的校驗(yàn)和實(shí)例
這篇文章主要介紹了C++計(jì)算ICMP頭的校驗(yàn)和的方法,代碼簡(jiǎn)單實(shí)用,對(duì)于校驗(yàn)ICMP報(bào)文來(lái)說(shuō)有不錯(cuò)的實(shí)用價(jià)值,需要的朋友可以參考下2014-10-10
VC運(yùn)用OPENGL加載BMP紋理圖的實(shí)現(xiàn)方法匯總
這篇文章主要介紹了VC運(yùn)用OPENGL加載BMP紋理圖的實(shí)現(xiàn)方法,對(duì)于更好的了解OpenGL很有幫助,需要的朋友可以參考下2014-07-07
在C語(yǔ)言中g(shù)etchar的使用方法和讀取規(guī)則講解
getchar中文意思是獲取字符,getchar函數(shù)從標(biāo)準(zhǔn)輸入輸出里讀取下一個(gè)字符,返回類型為int整形,返回用戶輸入的ASCII碼值,如果到達(dá)文件末尾或者出錯(cuò)返回EOF,這篇文章主要介紹了在C語(yǔ)言中g(shù)etchar的使用方法和讀取規(guī)則,需要的朋友可以參考下2022-12-12

