C语言深入探究水仙花数与变种水仙花数代码
1.水仙花
题目:
1.1先看代码
#include <stdio.h> int main() { int i = 0; int count = 0; for (i = 100; i<= 999; i++) { int a = i / 100; int b = (i % 100)/10; int c = (i % 100)%10; if (i == a * a * a + b * b * b + c * c * c) { printf("%d ", i); count++; } } printf("\ncount=%d\n", count); return 0; }
1.2大体逻辑
a.题中说三位数中,因此第一步就要创建三位数100~999,最常用的方法就是 for()循环来创建
b. 153=1*1*1+5*5*5+3*3*3
求出 i 这个三位数中的百位、千位、个位;然后立方相加 判断 是否等于 i 就可以了
c.如何计算得出有多少个这样的数呢?在这里需要定义一个变量count专门来计算个数。如下
2.变种水仙花数
题目:
2.1先看代码
#include <stdio.h> int main() { int i = 0; for (i = 10000; i <= 99999; i++) { int j = 10; int sum = 0; int tmp = i; for (j = 10; j <= 10000; j *= 10) { sum += (tmp % j) * (tmp / j); } if (sum == i) { printf("%d ", i); } } return 0; }
2.2代码剖析
a.题中说五位数中,因此第一步就要创建五位数10000~99999,还是用 for()循环来创建
b. 类似于
14610=1*4610+14*610+146*10+1461*0
14610/10000=1 14610%10000=4610
14610/1000=14 14610%1000=610
14610/100=146 14610%100=10
14610/10=1461 14610%10=0
看出逻辑了吗?用到循环来解
这串代码中:如果上面的 i 输入是16420,
sum=0 + (16420 % 10) * (16420 / 10) = 0*1642
sum=0 * 1642 + (16420 % 100) * (16420 / 100) = 0 * 1642 + 20 * 164
......
sum= 0 * 1642 + 20 *1 64 + 420 * 16 + 6420 * 1
一一列出就可以看出来循环的意思了
到此这篇关于C语言深入探究水仙花数与变种水仙花数代码的文章就介绍到这了,更多相关C语言水仙花数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
C++深入探究哈希表如何封装出unordered_set和unordered_map
哈希表是一种根据关键码去寻找值的数据映射结构,该结构通过把关键码映射的位置去寻找存放值的地方,说起来可能感觉有点复杂,我想我举个例子你就会明白了,最典型的的例子就是字典2022-06-06关于C++智能指针shared_ptr和unique_ptr能否互转问题
C++中的智能指针最常用的是shared_ptr和unique_ptr,C++新手最常问的问题是我从一个函数中拿到unique_ptr,但要转成shared_ptr才能使用,要怎么转换?同理是否能将shared_ptr转换成unique_ptr,面对这些问题,跟随小编一起看看吧2022-05-05C/C++中的 Qt StandardItemModel 数据模型应用解析
QStandardItemModel 是标准的以项数据为单位的基于M/V模型的一种标准数据管理方式,本文给大家介绍C/C++中的 Qt StandardItemModel 数据模型应用解析,感兴趣的朋友跟随小编一起看看吧2021-12-12linux c 查找使用库的cflags与libs的方法详解
本篇文章是对在linux中使用c语言查找使用库的cflags与libs的方法进行了详细的分析介绍,需要的朋友参考下2013-05-05
最新评论