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!

推薦閱讀: