網(wǎng)站首頁 編程語言 正文
前言
水仙花數(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í)解決,本文將從思路分析入手,帶大家逐步簡化問題,直到代碼實(shí)現(xiàn)。
一、思路分析
如果一個(gè)數(shù)是水仙花數(shù),那么它的每個(gè)位上的數(shù)字的 3次冪之和等于它本身,因此我們需要分離出它各個(gè)位置上的數(shù)字,并對(duì)他們的三次冪求和,與原數(shù)相等即可。
問題就簡化為了分離各個(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ù)
我們首先來寫一個(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)判斷,若為真,輸出;否則,跳過即可。
代碼如下(示例):
/* Alkaid#3529 */ #include<iostream> using namespace std; bool narcissus(int a); int main() { cout << "水仙花數(shù)有: "; // 從100開始,逐個(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)行無誤,結(jié)果正確,可以放心復(fù)制粘貼。
總結(jié)
水仙花數(shù)的判斷是常見的基礎(chǔ)題型,除此之外,后續(xù)會(huì)陸續(xù)推出 C++ 的進(jìn)階題目,感興趣且想學(xué)習(xí)的話不妨點(diǎn)點(diǎn)關(guān)注,你的點(diǎn)贊是我更新的最大動(dòng)力哦!
原文鏈接:https://blog.csdn.net/qq_51661256/article/details/122312551
相關(guān)推薦
- 2024-01-29 SpringBoot-yml文件的配置與讀取
- 2023-02-23 golang?int64轉(zhuǎn)int的方法_Golang
- 2022-07-11 spring boot中動(dòng)態(tài)代理導(dǎo)致自定義注解掃描失敗以及解決辦法
- 2023-07-28 el-table 默認(rèn)勾選數(shù)據(jù)
- 2022-06-12 查看docker中運(yùn)行的JVM參數(shù)問題及解決方法_docker
- 2022-10-25 IDEA創(chuàng)建spring spring項(xiàng)目并且注冊(cè)到nacos的SpringCloud示例
- 2021-12-13 VS在調(diào)試時(shí),查看是DEBUG/RELEASE
- 2023-02-12 redis如何清理緩存_Redis
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支