四叶玫瑰数是指一个四位数,其各位上的数字的四次方之和等于本身。
给定两个正整数N和M。
请将N~M(1≤N≤M≤1000000)之间(含N和M)的四叶玫瑰数按从小到大的顺序输出。
例如:N=1234,M=2345时,有一个四叶玫瑰数1634,因为1^4 + 6^4 + 3^4 + 4^4 = 1634,故输出1634
【输入描述】
第一行输入两个正整数N、M(1≤N≤M≤1000000
)
【输出描述】
输出一行,包含若干个用一个空格隔开的正整数,表示N~M之间的四叶玫瑰数按从小到大的顺序的输出结果(注意:题目数据保证给定的N~M范围内至少有一个四叶玫瑰数)
【样例输入】
1234 2345
【样例输出】
1634
分析:
考察枚举算法。
题目数据前后矛盾,题干描述的是四位数,后面的取值范围却是1~1,000,000。
实际上四叶玫瑰数本身是指针对四位数而言的,但本题有一个特例:数字1。
最终枚举范围为[n,min(m,10,000)]。
#include<iostream>
using namespace std;
int calc(int x)
{
return x*x*x*x;
}
int n,m,sum;
int main()
{
cin>>n>>m;
for(int i=n,t=n;i<=m;i++)
{
sum=0;
t=i;
while(t>0)
{
sum+=calc(t%10);
t/=10;
}
if(sum==i)
printf("%d\n",sum);
}
return 0;
}