资深十年C加加软件开发工程师整理C语言经典案例,三种方法求水仙花数 附完整代码

原题

输出所有的水仙花数,所谓水仙花数是指一个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

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20180130A0IF1W00?refer=cp_1026

同媒体快讯

相关快讯

扫码关注云+社区