C++實現水仙花數判斷實例
前言
水仙花數(Narcissistic number)也被稱為超完全數字不變數(pluperfect digital invariant, PPDI)或阿姆斯特朗數(Armstrong number),是指一個 3 位數,它的每個位上的數字的 3次冪之和等於它本身。例如:1^3 + 5^3+ 3^3 = 153。
找出指定范圍內的所有水仙花數需要我們利用循環的相關知識解決,本文將從思路分析入手,帶大傢逐步簡化問題,直到代碼實現。
一、思路分析
如果一個數是水仙花數,那麼它的每個位上的數字的 3次冪之和等於它本身,因此我們需要分離出它各個位置上的數字,並對他們的三次冪求和,與原數相等即可。
問題就簡化為瞭分離各個位置上的數,對於百位,我們可以知道,因為數據類型為 int 整型,因此原數除以100即為百位數;對於十位,將原數模100後,除以10即可;對於個位,模10即可獲得。
到此,整體思路已經明確,我們將其轉化為代碼。
二、代碼實現
1.水仙花函數
我們首先來寫一個函數,這個函數的功能是判斷一個數是否為水仙花數,如果是,返回真;否則,返回假。
代碼如下(示例):
/* Alkaid#3529 */ bool narcissus(int a) { int sum = 0; // 記錄最終求和結果 int x1 = a / 100; // 原數除以100即為百位 int x2 = a % 100 / 10; // 原數模100後,除以10就是十位數 int x3 = a % 10; // 模10的結果就是個位數 // 對得到的各位數的三次冪求和 sum = x1 * x1 * x1 + x2 * x2 * x2 + x3 * x3 * x3; // 判斷求和結果與原數是否相等 if (sum == a) return 1; else return 0; }
2.完整代碼
在現有函數基礎上,我們隻需對所有三位數循環判斷,若為真,輸出;否則,跳過即可。
代碼如下(示例):
/* Alkaid#3529 */ #include<iostream> using namespace std; bool narcissus(int a); int main() { cout << "水仙花數有: "; // 從100開始,逐個檢查所有三位數 for (int i = 100; i < 1000; i++) { if (narcissus(i)) cout << i << " "; } return 0; } bool narcissus(int a) { int sum = 0; // 記錄最終求和結果 int x1 = a / 100; // 原數除以100即為百位 int x2 = a % 100 / 10; // 原數模100後,除以10就是十位數 int x3 = a % 10; // 模10的結果就是個位數 // 對得到的各位數的三次冪求和 sum = x1 * x1 * x1 + x2 * x2 * x2 + x3 * x3 * x3; // 判斷求和結果與原數是否相等 if (sum == a) return 1; else return 0; }
我們運行一下程序,看看結果如何。
經檢驗,代碼運行無誤,結果正確,可以放心復制粘貼。
總結
水仙花數的判斷是常見的基礎題型,除此之外,後續會陸續推出 C++ 的進階題目,感興趣且想學習的話不妨點點關註,你的點贊是我更新的最大動力哦!
到此這篇關於C++實現水仙花數判斷實例的文章就介紹到這瞭,更多相關C++水仙花數判斷內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!