原题
输出所有的水仙花数,所谓水仙花数是指一个3位数,其各位数字立方和等于该数本身。
解题
思路
初始化i=100。
取i的各位数,百位a,十位b,个位c。
判断i==a∧3+b∧3+c∧3 是否成立
如果成立则输出,否则不输出。
i=i+1,当i小于1000重复,否则结束。
C/C++游戏编程比较系统的学习路线
c语言入门 程序设计-算法-运算符-顺序 分支 循环结构。C语言精通 数组-函数字串符
-指针-构造类型-预处理-存储管理-文件操作-数据结构。c++入门 面对对象编程-类和对象-运算符重载
-派生于继承,异常处理技术-C++语言 11标准-数据结构-(双向链表-双向队列-树-图)。c++精通
stl标准模板库(容器-迭代器-算法)正则表达式-boost标准模板库-socket网络编程-大型企业项目实战:
-员工信息管理系统-推箱子-俄罗斯方块-服务器-播放器-人工智能。windows高级工程师:win32/mfc
-windows高级编程-QT框架编程-大型企业级项目实战项目(人脸识别-车牌识别-局域网远程监控-等项目)
linux系统应用程序开发-linux内核构架研究-linux顶级网络服务器开发及搭建。大型企业项目实战
(linux内核高级虚拟内存驱动设计-linux网络间谍系统软件-linux内核网络数据劫持-linux网络阅读系统开发
等等)上述学习6个月时间左右,如果一天高效率用6个小时学习,加油奋吧,骚年们!
关键算法:取任意三位数的各位数
算法一:除减法
将数除以100,由整型数据特点,小数点后被忽略,取得百位a。
该数减去a * 100,除以10,得到十位b。
该数减去a * 100和b * 10即得个位c。
代码实现
a = i / 100;b = (i - 100 * a) / 10;c = i - 100 * a - 10 * b;
完整代码:
void NarcissusNumber(int m) { int a; //三位数的百位 int b; //三位数的十位 int c; //三位数的个位 int d; //各位数字立方和与数的差值 a = m / 100; b = (m - 100 * a) / 10; c = m - 100 * a - 10 * b; d = a*a*a + b*b*b + c*c*c - m; if (d==0) //各位数字立方和与数相等,输出 { printf("%d\n", m); } }
好处:易理解,菜鸟基本都会这算法。
不足:当数字位数较大时,减法操作需要进行多次,比较代码比较冗长。
算法二:除余法
将数除以10取余数得个位c
将数除以10后再与10取余得到十位b
将该数除以100再与10取余得到百位a
代码实现
int c = n % 10; //个位int b = n / 10 % 10; //十位int a = n / 100 % 10; //百位,或者写int c = n / 100;
这种算法对我们菜鸟来说很新奇,难以想到。
即使这样,该算法也不比算法一简洁,所以需要改进。
算法二改进
将数除以10取余数得个位c,将该数除以10
重复得到十位b
继续重复得到百位a
代码实现
int sum = 0; //求和变量 int temp=i; //存放数值i,防被覆盖而丢失 int rem; //余数for (int j = 0; j
这算法简便,效率较高
有点难懂
完整代码
//输出水仙花 void NarcissusNumber() { for (int i = 100; i
领取专属 10元无门槛券
私享最新 技术干货