美文网首页算法程序员我爱编程
C语言编程经典案例,三种方法求水仙花数(附完整代码)

C语言编程经典案例,三种方法求水仙花数(附完整代码)

作者: 小辰带你看世界 | 来源:发表于2018-02-24 22:49 被阅读59次

    C语言是面向过程的,而C++是面向对象的

    C和C++的区别:

    C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制)。

    C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事务)控制。 所以C与C++的最大区别在于它们的用于解决问题的思想方法不一样。之所以说C++比C更先进,是因为“ 设计这个概念已经被融入到C++之中 ”。

    C与C++的最大区别:在于它们的用于解决问题的思想方法不一样。之所以说C++比C更先进,是因为“ 设计这个概念已经被融入到C++之中 ”,而就语言本身而言,在C中更多的是算法的概念。那么是不是C就不重要了,错!算法是程序设计的基础,好的设计如果没有好的算法,一样不行。而且,“C加上好的设计”也能写出非常好的东西。

    原题

    解题

    思路

    初始化i=100。

    ①取i的各位数,百位a,十位b,个位c。

    ②判断i==a∧3+b∧3+c∧3 是否成立

    ③如果成立则输出,否则不输出。

    ④i=i+1,当i小于1000重复①,否则结束。

    关键算法:取任意三位数的各位数

    小编推荐一个学C语言/C++的学习裙【 二六三,六八八,二七六 】,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!

    算法一:除减法

    ①将数除以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 ", m); }}

    好处:易理解,菜鸟基本都会这算法。

    不足:当数字位数较大时,减法操作需要进行多次,比较代码比较冗长。

    小编推荐一个学C语言/C++的学习裙【 二六三,六八八,二七六 】,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!

    算法二:除余法

    ①将数除以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 < 3; j++)//第一次循环得到个位立方和,第二次循环得到个位与十位立方和...{ rem = temp % 10; temp /= 10; sum += rem * rem*rem;}

    这算法简便,效率较高

    有点难懂

    完整代码

    //输出水仙花void NarcissusNumber(){ for (int i = 100; i < 1000; i++) { int sum = 0; int temp=i; int rem; for (int j = 0; j < 3; j++) { rem = temp % 10; temp /= 10; sum += rem * rem*rem; } if (sum == i) { printf("%d ", i); } }}

    相关文章

      网友评论

        本文标题:C语言编程经典案例,三种方法求水仙花数(附完整代码)

        本文链接:https://www.haomeiwen.com/subject/bwocxftx.html