/*
题目:
水仙花数是指一个 n 位数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身。
(例如:1^3 + 5^3 + 3^3 = 153)。
定义一个函数int function(int a, int b),计算区间[a,b]或区间[b,a]上水仙花数的个数。
输入说明
输入由两个整数a和b构成,a和b之间用空格分隔。0<a,b<10000
输出说明
输出区间[a,b]或区间[b,a]上水仙花数的个数。
输入样例
3 1000
输出样例
4
提示
a,b的位数n可能小于3
*/
#include <stdio.h>
#include <math.h>
int function(int a, int b);
int main()
{
int a, b;
scanf("%d %d", &a, &b);
printf("%d", function(a, b));
return 0;
}
int function(int a, int b)
{
int i, sum, count, j, m, p, q;
for (i=a, count=0; i<=b; i++)
{
for(p=1, q=0; p<i; p*=10)
{
if (i/p>0)
q++;
}
int s = i;
for (j=0, sum=0; j<q; j++)
{
m=i%10;
sum+=pow(m, q);
i/=10;
}
if (sum==s)
count++;
}
return count;
}
运行不出结果,求改错
尝试了另一种写法,还是运行不出来,代码↓
#include <stdio.h>
#include <math.h>
int function(int n);
int main()
{
int a, b, i, count;
scanf("%d %d", &a, &b);
for (i=a<b?a:b, count=0; i<=a<b?b:a; i++)
{
if (function(i)==1)
count++;
}
printf("%d", count);
return 0;
}
int function(int n)
{
int sum, p, q, j, m, k;
for(p=1, q=0; p<n; p*=10)
{
if (n/p>0)
q++;
}
int s=n;
for (sum=0, j=0; j<q; j++)
{
m=n%10;
sum+=pow(m, q);
n/=10;
}
if (sum == s)
k=1;
else
k=0;
return k;
}