DAY 8 蓝桥杯 算法提高 五次方数

算法提高 五次方数

资源限制
时间限制: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.得知答案后可以调整上线来时编译速度加快。

越努力,越幸运

发布了22 篇原创文章 · 获赞 8 · 访问量 1499

猜你喜欢

转载自blog.csdn.net/OWCYKH/article/details/104188081