什么是自幂数?
如果在一个固定的进制中,一个n位自然数等于自身各个数位上数字的n次幂之和,则称此数为自幂数。
例如:在十进制中,153是一个三位数,各个数位的3次幂之和为1^3+5^3+3^3=153,所以153是十进制中的自幂数。
计算1~100000间的自幂数
思路:
1.计算数字 i 是几位数(假设为n次方)
2.计算i的十进制的每一位的n次方之和,判断是否等于i本身
那么如何计算数字 i 是几位数?
我们可以利用除法,用数字 i /10,引入中间变量n,利用循环每除一次增加1,直到结果为0为止,
例如数字153,
循环1: 153/10=15,此时n=1 ;
循环2: 15/10=1, 此时n=2;
循环3: 1/10=0, 此时n=3 ; 停止循环。得出153为3位数。
下一个问题,如何计算每一位的n次方?
我们可以利用取余,用数字 i%10,再将 i/10 的结果赋值给i,以此循环就可以找到每一位数字。
例如数字153,
循环1: i=153,i%10=3,个位找到,i/10=15,
循环2: i=15 ,i%10=5,十位找到,i/10=1,
循环3: i=1 ,i%10=1,百位找到,i/10=0, 循环结束,找到153的每个数
接下来只需要计算和判断结果是否等于i。
代码呈现
#include<stdio.h>
#include<math.h>
int main()
{
int i = 0;
for (i = 0; i <= 100000; i++)
{
int n = 0;
int t = i;
while (t)//计算位数
{
t/= 10;
n++;
}
//计算i的十进制的每一位的n次方之和,判断是否等于i本身
t = i;
int sum = 0;
while (t)
{
sum +=(int) pow(t % 10, n);
t /= 10;
}
if (sum == i)
{
printf("%d ", i);
}
}
}
需要注意:1.使用函数 pow 需要 加入 #include<math.h>
2.判断相等用==,=是赋值