博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
求出0~999之间的所有“水仙花数”并输出
阅读量:6279 次
发布时间:2019-06-22

本文共 1501 字,大约阅读时间需要 5 分钟。

“水仙花数”是指一个三位数,其各位数字的立方和确好等于该数本身,如;153=1+5+3?,则153是一个“水仙花数”。

/*
在数论中,水仙花数(Narcissistic number)也称为自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrong number),是指一N位数,其各个数之N次方和等于该数。
例如153、370、371及407就是三位数的水仙花数,其各个数之立方和等于该数:
153 = 1^3 + 5^3 + 3^3。
370 = 3^3 + 7^3 + 0^3。
371 = 3^3 + 7^3 + 1^3。
407 = 4^3 + 0^3 + 7^3。
*/

思路:同理可以用提取整数每一位的方法来实现,将每一位的数字先立方然后在求和,同原来的数字比较大小,如果和原来是一样的值则输出,不一样则继续循环。

方法一:

1 #include
2 int main() 3 { 4 int a, b, c; 5 int count = 0; 6 for (int i = 100;i < 1000;i++) 7 { 8 a = i % 10;//提取整数的个位数字 9 b = (i / 10) % 10;//提取整数的十位数字10 c = (i / 100) % 10;//提取整数的百位数字11 //判断是否为水仙花数字12 if (i == a * a*a + b * b*b + c * c*c)13 {14 count++;//个数15 printf("%d\n", i);16 }17 }18 printf("count=%d", count);19 20 return 0; 21 }

方法二:

第二种方法要注意一点,因为代码中有temp=temp/10;将原来的i值改变了,不能用与if语句的判断,所以应该在用一个临时变量来将i的值保存,方便之后的比较。

1 #include
2 int main() 3 { 4 int i; 5 for (i = 100;i < 1000;i++) 6 { 7 int sum = 0; 8 int temp = i; 9 //下面if语句要与原来的i进行比较,如果不保存i 的值会使得后面的i发生变化10 while (temp)11 {12 int num = temp % 10;//取个位的数字13 sum = sum + num * num * num;//求立方和14 temp = temp / 10;//将三位数变为两位数15 }16 if (sum == i)//判断是否为水仙花数17 {18 printf("%d\n", i);19 }20 }21 return 0;22 23 }

 

转载于:https://www.cnblogs.com/cuckoo-/p/10295245.html

你可能感兴趣的文章
Android 密钥保护和 C/S 网络传输安全理论指南
查看>>
以太坊ERC20代币合约优化版
查看>>
Why I Began
查看>>
同一台电脑上Windows 7和Ubuntu 14.04的CPU温度和GPU温度对比
查看>>
js数组的操作
查看>>
springmvc Could not write content: No serializer
查看>>
Python系语言发展综述
查看>>
新手 开博
查看>>
借助开源工具高效完成Java应用的运行分析
查看>>
163 yum
查看>>
第三章:Shiro的配置——深入浅出学Shiro细粒度权限开发框架
查看>>
80后创业的经验谈(转,朴实但实用!推荐)
查看>>
让Windows图片查看器和windows资源管理器显示WebP格式
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
vim使用点滴
查看>>
embedded linux学习中几个需要明确的概念
查看>>
mysql常用语法
查看>>
Morris ajax
查看>>
【Docker学习笔记(四)】通过Nginx镜像快速搭建静态网站
查看>>