xdoj四星题它来了,不过我觉得难度一星它确实很难,真的。
问题描述
水仙花数是指一个 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 i,cnt=0,p,q,r,sum=0,count=0;
if(a<100)
a=100; //如果位数小于三,就让它从三位数第一位100开始
for(i=a;i<=b;i++){
q=i;//赋值,等会i还要用
r=i;//同上
while(q!=0){
p=q%10;
cnt++;
q/=10;
} //求出该数的位数,以便作为次数
while(r!=0){
p=r%10;
sum+=pow(p,cnt); //懂得都懂
r/=10;
}
if(sum==i){
count++; //相等那此区间上水仙花数数量就加一
}
sum=0; //归零,归零,归零
cnt=0; //归零,归零,归零
}
return count;
}
int main(){
int a,b;
scanf("%d %d",&a,&b); //区间
printf("%d",function(a,b));
}
这种算法比较清晰的题还是不难想到的。
溜了。
无耻求赞 。