四叶玫瑰数是指一个四位数,其各位上的数字的四次方之和等于本身。
给定两个正整数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; }