题目描述
水仙花数是指一个 n 位数 ( n >= 3 ),它的每个位上的数字的 n 次幂之和等于它本身。(例如:1^3 + 5^3 + 3^3 = 153)
给出一个整数M,求 >= M的最小的水仙花数。
Input
一个整数M(10 <= M <= 1000)
Output
输出>= M的最小的水仙花数
Input示例
99
Output示例
153
做法:这里提供一个暴力的做法,据说这个叫阿姆斯特朗数,最多不会超过34位,只有89个。。。然而并不能找到理论证明。。
代码如下:
#include <cstdio>
#include <cstring>
#include <cmath>
#include <iostream>
using namespace std;
int m;
int main()
{
cin >> m;
for (int i = 0; i <= 9; i++)
for (int j = 0; j <= 9; j++)
for (int k= 0; k <= 9; k++)
{
int p = pow(i, 3) + pow(j, 3) +pow(k, 3);
int q = i * 100 + j * 10 + k;
if (p == q && p >= m)
{
printf("%d\n", p);
return 0;
}
}
for (int i = 0; i <= 9; i++)
for (int j = 0; j <= 9; j++)
for (int k= 0; k <= 9; k++)
for (int l = 0; l <= 9; l++)
{
int p = pow(i, 4) + pow(j, 4) + pow(k, 4) + pow(l, 4);
int q = i * 1000 + j * 100 + k * 10 + l;
if (p == q && p >= m)
{
printf("%d\n", p);
return 0;
}
}
}