【51Nod - 1015 】水仙花数

水仙花数是指一个 n 位数 ( n >= 3 ),它的每个位上的数字的 n 次幂之和等于它本身。(例如:1^3 + 5^3 + 3^3 = 153)

给出一个整数M,求 >= M的最小的水仙花数。

Input

一个整数M(10 <= M <= 1000)

Output

输出>= M的最小的水仙花数

Sample Input

99

Sample Output

153

题意好懂的中文题,感觉自己写的麻烦了。。。

ac代码:

#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<math.h>
#include<cstring> 
#include<string.h>
#include<queue>
using namespace std;
typedef long long ll;
int s[5000];
int qsm(int a,int b)
{
	int t=1;
	while(b)
	{
		if(b&1)
		t*=a;
		a*=a;
		b>>=1;
	}
	return t;
}
int cal(int t)
{
	int ans=0;
	int num=t;
	int n=0;
	while(num)
	{
		num/=10;
		n++;
	}
	num=t;
	while(t)
	{
		ans+=qsm(t%10,n);
		t/=10;
	}
	return ans==num;
}
int main()
{
	int cnt=0;
	for(int i=0;i<3000;i++)
	{
		if(cal(i))
		{
			s[cnt++]=i;
		}
	}
	int m;
	scanf("%d",&m);
	printf("%d\n",*lower_bound(s,s+cnt,m));
	return 0;
 } 

看了别人的代码发现,其实直接找出那几个数判断就好,本来数据范围就不大。

来自:https://www.cnblogs.com/qhy285571052/p/36cebc009dc194f5bc566b130086c662.html

#include<stdio.h>
using namespace std;
int main(){
        int m;
        scanf("%d",&m);
        if(m > 407){
                puts("1634");
        }else if(m > 371){
                puts("407");
        }else if(m > 370){
                puts("371");
        }else if(m > 153){
                puts("370");
        }else puts("153");
}

猜你喜欢

转载自blog.csdn.net/QQ_774682/article/details/81257838