/*题目: 水仙花数 类别 流程控制 时间限制 2S 内存限制 10000Kb 问题描述 水仙花数是指一个 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 #includeint function(int a,int b) { int i,u; int n=0; for(i=a;i<=b;i++) { if(a<100) { a=100; } int sum = 0;//这里对i的数位进行判断 u = i;//将i的值赋值给u防止do-while操作对i本身造成影响 do { sum++; u/=10; } while(u); if(sum == 3) { if(pow(i%10,sum)+pow((i/10)%10,sum)+pow(i/100,sum)==i) { n++; } } else if(sum == 4) { if(pow(i%10,sum)+pow((i/10)%10,sum)+pow((i/100)%10,sum)+pow((i/1000),sum)==i) { n++; } }//这两段判断太过麻烦可以用while代替 } return n; } int main() { int x,y; scanf("%d %d",&x,&y); printf("n%d",function(x,y)); }
可以用while循环代替上文对sum==3或4的判断,更加便捷(别老惦记着你那if条件判断)
#include#include 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){ printf("%dn",i); count++; //相等那此区间上水仙花数数量就加一 } sum=0; //归零,归零,归零 cnt=0; //归零,归零,归零 } return count; } int main(){ int a,b; scanf("%d %d",&a,&b); //区间 printf("%d",function(a,b)); }



