水仙花数

水仙花数Java在这里插入图片描述

输入输出

输入样例:3

输出样例:153
370
371
407

我以为事情很简单不就是跑循环吗

对不起我错了

平平无奇超时小能手

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;

//import Book.BookList;

public class Main {
public static void main(String []arg) {
Scanner in=new Scanner(System.in);
int n=in.nextInt();
int min=1;
int max=1;
for(int i=0;i<n;i++) {
max*=10;
}
min=max/10;
for(int i=min;i<max;i++) {
int sum=0;
int num=i;
for(int j=0;j<n;j++) {
int num1=num%10;
num/=10;
sum+=(int)(Math.pow(num1,n));
}
if(sum==i) {
System.out.println(i);
}
}
}
}

鲁迅说过战胜恐惧的最好方法就是战胜恐惧!加油,奥里给!

于是接下来我展开了长达两小时的超时之旅。最后顶不住了找同学要来代码

我看了同学的代码,发现她的代码非常非常非常乱,稀碎稀碎的

在这里插入图片描述
但是偏偏她的代码就不超时!于是我就把她的代码按我的思路改。改完之后,淦,超时了
猴,让我康康这个弟弟哪里不对Alt

是Math.pow(a,n)!!!

可以用for循环一个个的×,只要用pow就超时,为什么呢很神奇,于是我去网上查,没查出啥来,又跑去问同学,终于也没得到答案。今天先记一下,明天再补充。

把正确代码贴一下

import java.util.*;
public class Main {

public static void main(String[] args) {
	// TODO 自动生成的方法存根
	Scanner in = new Scanner(System.in);
	int num=in.nextInt();
	int a=(int) Math.pow(10, num);
	for(int i=a/10;i<a;i++)
	{
		if(flower(i,num)==1)
		{
			System.out.print(i+"\n");	
		
		}
	}
	}

static int flower(int n,int z)
{  
    int  n1=n;
    int sum=0;
	while(true)
	{
		int a=1;
		 for(int i=0;i<z;i++) {
		    	a*=n%10;
		    }
		sum+=a;
		n=n/10;
		if(n<1)
			break;
	}
    if(sum==n1)
    	return 1;
    else
    	return 2;
}

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值