什么是自幂数?
如果在一个固定的进制中,一个n位自然数等于自身各个数位上数字的n次幂之和,则称此数为自幂数。
水仙花数
求“水仙花数”并输出。
“水仙花数”是指一个3位数,其各位数字的立方之和确好等于该数本身.
如:153=1^3+5^3+3^3,则153是一个“水仙花数”。
思路
因为水仙花数在100~999之间,所以直接for循环变量i,然后分别求出百位数,十位数,个位数,
最后立方和,判断是否相等就可以。
代码如下:
#include<stdio.h> #include<math.h> int main() { int i = 0; for (i = 100; i <1000; i++)//控制i在100~999之间 { int a = i / 100; int b = i / 10 % 10; int c = i % 10; if (i == pow(a, 3) + pow(b, 3) + pow(c, 3)) { printf("%d ", i);//打印 } } return 0; }
扩展自幂数
扩展,就是不局限于求“水仙花数”这个自幂数,可以求更多的自幂数。
例如:求出0~100000之间的所有自幂数并输出。
思路
基本的思路和水仙花数是差别不大的,但是其中多一点东西,那么多一些什么呢?
废话少说,下面我们直接上代码:
#include <math.h> #include<stdio.h> int main() { int i = 0; for (i = 0; i <= 1000000; i++) { //1. 计算出i是几位数 - n int n = 1; int tmp = i; while (tmp>9) { tmp /= 10; n++; } //计算i的十进制的每一位的n次方之和,判断是否等于i本身 tmp = i; int sum = 0; while (tmp) { sum += (int)pow(tmp % 10, n); tmp /= 10; } if (sum == i) { printf("%d ", i); } } return 0; }
相信大家都发现多了什么,没错,就是多了一个求这个数是个几位数,用了一个很简单的小循环,运行结果给大家贴出来了,我们下次见~ ̄︶ ̄∗ ̄︶ ̄∗)
求各位大佬点赞,评论加关注,喜欢的也可以关注此专栏,将持续更新一些经典有趣的题。😋