c++中如何判断一个数是否为水仙花数_c++三位数水仙花数代码
发布时间 - 2026-01-06 00:00:00 点击率:次水仙花数是各位数字的n次方和等于自身的n位正整数。例如153是三位水仙花数,因1³+5³+3³=153;判断时需动态计算位数、逐位提取、手写整数幂函数防浮点误差,并注意整型溢出。
什么是水仙花数(Narcissistic Number)?
水仙花数特指一个 n 位正整数,其各位数字的 n 次方之和恰好等于它本身。比如三位数中常见的 153:因为 1³ + 5³ + 3³ = 1 + 125 + 27 = 153,所以它是水仙花数。
注意:严格来说,“水仙花数”在中文语境里常被默认为三位数,但数学定义是泛指 n 位数的自幂数。C++ 判断时必须先确定位数,再逐位求幂累加,不能硬编码只算三次方。
判断任意正整数是否为水仙花数的通用函数
关键点在于:不能假设输入一定是三位数;要动态计算位数、提取每位数字、用 pow 或手动幂运算(注意 pow 返回 double,可能有精度问题)。
- 用循环或
to_string获取位数n - 用取模
% 10和整除/ 10提取每一位 - 避免
pow(digit, n)—— 对大数或某些编译器(如 MSVC)可能导致浮点误差,建议手写整数幂函数 - 注意
int溢出风险:比如9⁹ = 387,420,489,仍在int范围内;但9¹⁰就超了,所以对超过 9 位的数,可提前返回false或改用long long
bool isNarcissistic(int num) {
if (num <= 0) return false;
int temp = num;
int n = 0;
while (temp) { n++; temp /= 10; } // 计算位数
temp = num;
int sum = 0;
while (temp) {
int digit = temp % 10;
int power = 1;
for (int i = 0; i < n; ++i) power *= digit; // 手动计算 digit^n
sum += power;
temp /= 10;
}
return sum == num;
}
输出所有三位数水仙花数的简洁代码
如果只要三位数(100–999),可直接固定 n = 3,省去位数统计开销,也更安全——因为三位数的立方最大为 9³ = 729,三个相加最多 3×729 = 2187,不会溢出 int。
常见错误:用 pow(i/100, 3) + pow((i/10)%10, 3) + pow(i%10, 3) —— pow 的浮点结果转 int 可能因舍入误差错判(例如 pow(4,3) 理论是 64,但某些平台返回 63.999999)。
#includeusing namespace std; int main() { cout << "三位水仙花数:"; for (int i = 100; i <= 999; ++i) { int a = i / 100; int b = (i / 10) % 10; int c = i % 10; int sum = a*a*a + b*b*b + c*c*c; if (sum == i) cout << i << " "; } cout << endl; return 0; }
容易被忽略的边界与性能细节
真正写健壮代码时,这几个点常被跳过:
-
0不是水仙花数(按定义要求“正整数”,且0¹ = 0会误判;但单独处理更清晰) - 一位数如
5:满足5¹ = 5,数学上属于水仙花数,但多数题目隐含“多位数”,需看题意 - 用
std::to_string(x).length()简洁但有构造开销,对高频调用不友好 - 预计算幂表(如
int cube[10] = {0,1,8,27,...})比每次循环乘更快,尤其对固定位数场景
如果你在写算法题或嵌入式环境,优先手算幂、避免 pow、显式处理 0 和负数——这些不是“小问题”,而是导致 WA 或运行时异常的根源。
# git
# 编码
# c++
# 整型
# int
# double
# 循环
# Length
# number
# 算法
# 浮点
# 正整数
# 最多
# 你在
# 它是
# 能有
# 更快
# 可直接
# 这几个
# 每一位
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel怎么实现支付功能_Laravel集成支付宝微信支付
再谈Python中的字符串与字符编码(推荐)
html5怎么画眼睛_HT5用Canvas或SVG画眼球瞳孔加JS控制动态【绘制】
详解阿里云nginx服务器多站点的配置
如何在VPS电脑上快速搭建网站?
如何在Windows 2008云服务器安全搭建网站?
Windows10如何删除恢复分区_Win10 Diskpart命令强制删除分区
湖南网站制作公司,湖南上善若水科技有限公司做什么的?
Laravel如何为API编写文档_Laravel API文档生成与维护方法
Laravel如何自定义错误页面(404, 500)?(代码示例)
如何在HTML表单中获取用户输入并结合JavaScript动态控制复利计算循环
如何用虚拟主机快速搭建网站?详细步骤解析
高端智能建站公司优选:品牌定制与SEO优化一站式服务
如何在宝塔面板创建新站点?
Laravel用户认证怎么做_Laravel Breeze脚手架快速实现登录注册功能
如何选择可靠的免备案建站服务器?
Bootstrap CSS布局之列表
音乐网站服务器如何优化API响应速度?
Laravel如何实现文件上传和存储?(本地与S3配置)
Laravel PHP版本要求一览_Laravel各版本环境要求对照
php8.4header发送头信息失败怎么办_php8.4header函数问题解决【解答】
教你用AI将一段旋律扩展成一首完整的曲子
西安专业网站制作公司有哪些,陕西省建行官方网站?
JavaScript如何实现类型判断_typeof和instanceof有什么区别
html5的keygen标签为什么废弃_替代方案说明【解答】
微信小程序 五星评分(包括半颗星评分)实例代码
Win11怎么关闭透明效果_Windows11辅助功能视觉效果设置
谷歌浏览器如何更改浏览器主题 Google Chrome主题设置教程
合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?
详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)
html5源代码发行怎么设置权限_访问权限控制方法与实践【指南】
香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧
JavaScript常见的五种数组去重的方式
手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?
如何在云主机快速搭建网站站点?
Laravel如何实现模型的全局作用域?(Global Scope示例)
如何快速生成凡客建站的专业级图册?
Laravel Eloquent:优雅地将关联模型字段扁平化到主模型中
千库网官网入口推荐 千库网设计创意平台入口
Win11摄像头无法使用怎么办_Win11相机隐私权限开启教程【详解】
千问怎样用提示词获取健康建议_千问健康类提示词注意事项【指南】
大学网站设计制作软件有哪些,如何将网站制作成自己app?
如何注册花生壳免费域名并搭建个人网站?
微信小程序 input输入框控件详解及实例(多种示例)
JS去除重复并统计数量的实现方法
Laravel Seeder怎么填充数据_Laravel数据库填充器的使用方法与技巧
如何有效防御Web建站篡改攻击?
消息称 OpenAI 正研发的神秘硬件设备或为智能笔,富士康代工
Win11怎么修改DNS服务器 Win11设置DNS加速网络【指南】
三星网站视频制作教程下载,三星w23网页如何全屏?
下一篇:电脑查看照片尺寸方法
下一篇:电脑查看照片尺寸方法


int power = 1;
for (int i = 0; i < n; ++i) power *= digit; // 手动计算 digit^n
sum += power;
temp /= 10;
}
return sum == num;
}