BC38
- 判断是不是自幂数(水仙花数)
- [BC38 变种水仙花](#BC38 变种水仙花)
判断是不是自幂数(水仙花数)
题目描述
参考代码:
c
//直接暴力求解
//先计算某个数有几位 然后分别拿到每一位进行计算
#include<math.h>
//计算num是几位数
int numOfDigit(int num)
{
int count = 0;
//153 1 15 2 1 3
while (num > 0)
{
count++;
num /= 10;
}
return count;
}
//拿到num的每一位数求和 判断是不是自幂数
int isSelfPower(int num)
{
int sum = 0;//求和
int count = numOfDigit(num);//num是几位数
int flag = num;//用于保存初始num的值
//1234 4 123 3 12 2 1 1
while (num > 0)
{
//pow的返回值类型是double
sum += (int)pow(num % 10, count);
num /= 10;
}
return sum == flag;
}
int main()
{
int i = 0;
for (i = 1; i <= 100000; i++)
{
if (isSelfPower(i))
printf("%d ", i);
}
return 0;
}
BC38 变种水仙花
题目链接
解析
注意下面的sum = 0
每次循环都要把sum置为0 否则sum会保持上次计算的结果
12345:
1(12345/10000) 2345(12345%10000)
12(12345/1000) 345(12345%1000)
123(12345/100) 45(12345%100)
1234(12345/10) 5(12345%10)
参考代码:
c
#include <math.h>
#include <stdio.h>
int main() {
int i = 0;
int j = 0;
int sum = 0;
for (i = 10000; i <= 99999; i++) {
sum = 0;
for (j = 1; j <= 4; j++) {
int k = pow(10, j);
//sum+=(i/k)*(i%k);
sum += (i / (int)pow(10, j)) * (i % (int)pow(10, j));
}
if(sum == i)
printf("%d ",i);
}
return 0;
}

