算法提高 五次方数
资源限制
时间限制:1.0s 内存限制:256.0MB
问题描述
对一个数十进制表示时的每一位数字乘五次方再求和,会得到一个数的五次方数
例如:1024的五次方数为1+0+32+1024=1057
有这样一些神奇的数,它的五次方数就是它自己,而且这样的数竟然只有有限多个
从小到大输出所有这样的数
输出格式
每个数独立一行输出
样例输出
10
200
3000
思路
首先要考虑这个五次方的上限是多少。考虑的思路就是看几位数全是9的五次方数大于这个数,可以通过编写程序来找出大概范围。
#include<iostream>
#include<cmath>
using namespace std;
int n;
int wcf(int x)
{
return x*x*x*x*x;
}
int main()
{
scanf("%d", &n);
cout << wcf(9)*n << endl;
return 0;
}
通过一位数是9试到七位数,也就是当输入7时,输出结果如下:
7位数的9的五次方竟然是六位数,所以不可能等于他这个数的本身。
所以可以得到循环上线就是当输入6时得到的值354294。
AC代码:
#include<iostream>
#include<cmath>
using namespace std;
int n;
int wcf(int x)
{
return x*x*x*x*x;
}
int main()
{
for (int i = 2; i < 354294; i++)
{
int sum = 0, t = i;
while (t)
{
if (t % 10 != 0)
sum += pow(t % 10, 5);//求幂函数,即t%10的五次方
t /= 10;
}
if (sum == i)
printf("%d\n", i);
}
return 0;
}
输出结果如下:
PS.得知答案后可以调整上线来时编译速度加快。
越努力,越幸运