水仙花数的判断C语言,+最终代码优化
水仙花数的判断
- 什么是水仙花数
- 思路讲解
- 代码实现
- 代码优化
前言:代码主要功能就是判断一定范围内的水仙花数,并最终将他们打印出来。
什么是水仙花数
“水仙花数”是指一个n位数,其各位数字的n次方之和确好等于该数本身,如:153=1 ^ 3+5 ^ 3+3 ^ 3,则153是一个“水仙花数”。
思路讲解
根据上面对水仙花数的一个定义来看(我们假设要判断0~10000之内的水仙花数,并最终将数字输出在屏幕上),我们要判断一个数是否是水仙花数的时候,首先要先直到它是几位数,然后再将其的每一位数字的位数次方之和加起来与这个数字本身进行比较,如果相同,那么就输出该数字。
我们大致的思路就是这样子,然后就是将代码的不同模块分别实现就好了。
一,判断位数其实很简单,只需要用if()语句就好了
if (i < 10)count = 1;if (i < 100 && i >= 10)count = 2;if (i < 1000 && i >= 100)count = 3;if (i < 10000 && i >= 1000)count = 4;)//因为10000不是水仙花数,所以不需要进行计算
二,计算每一位数字的位数次方之和
这里我们介绍一个函数pow(),头文件是<math.h>
double pow( double x, double y );
头文件:math.h/cmath(C++中)
功能:计算x的y次幂。
返回值:返回幂指数的结果,即x的y次幂。若x为负数且y为小数,或者x为0且y小于等于0,将出现结果错误。
返回类型:double型,int,float会给与警告
这里我们在使用的时候,要注意一点的是这个函数的返回值是一个double类型,如果我们用整形接受的话,最好在前面进行强制类型转换
long sum = 0;sum += (long)pow(j % 10, count);
三,第三步进行一个简单的判断就行了
代码部分我放在代码实现盘块来写了
代码实现
#include <stdio.h>
#include <math.h>
int main()
{long i = 0;int count = 0;for (i = 0; i < 10000; i++){int j = i;//位数if (i < 10)count = 1;if (i < 100 && i >= 10)count = 2;if (i < 1000 && i >= 100)count = 3;if (i < 10000 && i >= 1000)count = 4;long sum = 0;while (j){sum += (long)pow(j % 10, count);//强制类型转换j = j / 10;}//判断部分if (i == sum){printf("%ld ", sum);}}return 0;
}
代码优化
上面代码虽然能实现我们的要求,但是代码在求位数的时候,是不多变的,我们可不可以让i自己来求得自己是几位数呢?答案是当然可以
#include <stdio.h>
#include <math.h>
int main()
{long i = 0;for (i = 0; i < 100000; i++){int j = i;//为了不影响i的循环,另外使用一个变量//位数int q = i;//为了不改变i和j的值,另外用一个变量来判断位数int count = 1;while (q > 9){count++;q = q / 10;}long sum = 0;while (j){sum += (long)pow(j % 10, count);j = j / 10;}if (i == sum){printf("%ld ", sum);}}return 0;
}
这里我们在判断位数的时候,改用while()来判断,这样我们在扩大范围时,就不用再重新来添加if()进行判断位数了,大大的提高了,代码的灵活性
水仙花数的判断C语言,+最终代码优化相关推荐
- 水仙花数的判断(JAVA)
水仙花数(JAVA) 水仙花数的判断(JAVA) 水仙花数的判断(JAVA) 用户输入一个数,判断是否是"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字 ...
- linux水仙花代码,C语言实现对水仙花数的判断
水仙花数(Narcissistic number)也被称为超完全数字不变数(pluperfect digital invariant, PPDI).自恋数.自幂数.阿姆斯壮数或阿姆斯特朗数(Armst ...
- 打印出所有的水仙花数javascript_期末C语言特辑 水仙花数
点击蓝字 关注我们 期末C语言特辑 水仙花数 [问题描述]水仙花数(Narcissistic number)也被称为超完全数字不变数(pluperfect digital invariant, PP ...
- c语言实验题水仙花数5359,《C语言程序设计》实验报告(实验1-12).doc
<C语言程序设计>实验报告(实验1-12).doc 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会 ...
- c语言水仙花数素数,【C语言】斐波那契分数数列和、水仙花数、素数
1. 斐波那契分数数列的前n项之和 斐波那契分数数列为2+3/2+5/3+8/5+13/8+- #include"stdio.h" //斐波那契分数:下一个分数的分母是前一个分数的 ...
- JAVA水仙花数与判断是否为水仙花数
问题描述 水仙花数是指一个3位数,它的每个位上的数字的3次幂之和等于它本身 *** 水仙花 DaffodilNum* 水仙花数是指一个3位数,它的每个位上的数字的3次幂之和等于它本身* public ...
- c语言水仙花数算法流程图,C语言经典算法例题求100-999之间的“水仙花数
#include #include using namespace std; /* 求100-999之间的水仙花数 */ int main() { int number,hun,ten,gw,sum; ...
- 什么是水仙花数并判断水仙花数
题目:打印出所有的 "水仙花数 ",所谓 "水仙花数 "是指一个三位数,其各位数字立方和等于该数本身.例如:153 是一个 "水仙花数 ", ...
- python判断三位数水仙花数_python 判断一个三位数是不是水仙花数
原博文 2020-03-25 19:03 − 还有别的方法,这里只写了一种,可能复杂了点 水仙花数是一个三位数, 三位数的每一位的三次方的和还等于这个数. 那这个数就是一个水仙花数, ```pytho ...
最新文章
- ​忆阻器会成为“存储墙”的破局者么
- 利用SMTP收发邮件
- mimo 鲁棒控制 matlab,项目调度问题的一些matlab开发的工具箱
- Android SqliteManager 源码
- 51单片机C语言led流水灯及数码管实现秒表
- 求数组中的最小子数组,时间复杂度o(n),java
- 汇顶软件开发初面总结20180921
- Linux 监控命令之 vmstat
- CSS Reset Modern CSS Reset
- Linux傲腾内存,Intel傲腾内存全面对比实测
- android opengl把经纬度点用红色点显示在3d地球上,在OpenGL中使用正确的经度和纬度在全球范围内渲染点...
- 重仓金融股却遭“滑铁卢”
- 开通微信小店显示:系统繁忙,请稍后再试怎么回事?如何解决?
- 计算机网络设备调试员报名,工信部网络设备调试员一级高级技师、二级技师
- 提升80%上云集成效率, TA是如何做到的
- 企业微信朋友圈和个人微信朋友圈有哪些区别?
- linux防火墙关闭开放的端口,Linux关闭防火墙,开放端口
- KISSY基础篇乄KISSY之Node(2)
- 1977-2021 高考四十四年,哪一张照片是属于你的记忆(珍贵!)
- Educoder--Python正则表达式分组