春天是鲜花的季节,水仙花就是其中最迷人的代表,数学上有个水仙花数,他是这样定义的:
“水仙花数”是指一个三位数,它的各位数字的立方和等于其本身,比如:153=1^3+5^3+3^3。
现在要求输出所有在m和n范围内的水仙花数。
如果给定的范围内不存在水仙花数,则输出no;
每个测试实例的输出占一行。
100 120
300 380
如果直接在%d后面加空格,会造成最后一个水仙花数输出时多出一个空格,从而产生PE,我解决的办法是重新设置一个数组来记录水仙花数,并用一个标记变量来记录有多少个水仙花数,从而控制空格的输出,解决PE的问题。
正确代码
#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<cmath>
#include<iomanip>
using namespace std;
int main()
{
int a,b,i,w1,w2,w3,flag=0,c[10],n=0;
while(scanf("%d %d",&a,&b)!=EOF)
{ flag=0,n=0;
if(a>b) swap(a,b);
flag=0;
for(i=a;i<=b;i++)
{
w1=i%10;
w2=(i/10)%10;
w3=i/100;
if(i==pow(w1,3)+pow(w2,3)+pow(w3,3))
{
c[n++]=i;
flag++;
}
}
if(flag)
{
for(i=0;i<flag;i++)
{
cout<<c[i];
if(i!=flag-1)
cout<<" ";
}
}
if(flag==0)
cout<<"no";
cout<<endl;
}
return 0;
}