😫作者: 花椒不辣
🍭专栏:《C语言刷题篇》
☕简介: 三人行,必有我师焉,一起学习一起努力,如果你有什么问题,也可以私信问我哦~ 大家一起加油~
🎈刷题:牛客网、洛谷、LeetCode
什么是自幂数?
如果在一个固定的进制中,一个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;
}
相信大家都发现多了什么,没错,就是多了一个求这个数是个几位数,用了一个很简单的小循环,运行结果给大家贴出来了,我们下次见~\( ̄︶ ̄*\))
求各位大佬点赞,评论加关注,喜欢的也可以关注此专栏,将持续更新一些经典有趣的题。😋