【YY笔试】暴力求解水仙花数(java)

笔试的时候思路出了问题没有做出来,一直死循环,没有用main方法调试(哭)
    /**
     * 找到比输入的整数大的下一个水仙花数
     * @param n int整型 输入的整数
     * @return long长整型
     */
    public static long nextNarcissisticNumber (int n) {
    	if(n<9) return n+1;
    	int count,flower,temp;
    	int j = 0;
    	while(true) {
        	temp = n+(++j);
    		count = 0;
    		flower = 0;
//    		判断是几位数
        	while(temp!=0) {
        		temp = temp/10;
        		count++;
        	}
        	temp = n+j;
//        	计算,判断当前数是否为水仙花数,如果是则跳出while循环
        	for(int i=0;i<count;i++,temp=temp/10) flower += Math.pow(temp%10,count);
        	if(flower==n+j) break;
    	}
    	return flower;
    }


考后重新整理思路写了上述解法,还是比较暴力,希望有大佬交流一下更高级的解法
#笔试题目#
全部评论
除了暴力破解想不到了 public static long nextNarcissisticNumber (int n) {                  long next = 0;         long i = n + 1;         while(next == 0){             String s = i + "";             int len = s.length();             long j = i;             long sum = 0;             while(j != 0){                 long num = j % 10;                 sum += Math.pow(num,len);                 j = j / 10;             }             if(sum == i){                 next = i;                 break;             }else              i ++;         }         return next;     }
1
送花
回复 分享
发布于 2020-08-31 23:13
hhh这么多华工的么 import java.util.ArrayList; public class flower02 { public static void main(String[] args) { int n = 8456168; ArrayList<Integer>  list = new ArrayList<>(); for(int j=n;j<Integer.MAX_VALUE;j++) { list.clear(); int k = Count(j); int temp = j; int sum = 0; for(int a = 0;a<k;a++) { list.add(temp%10); temp = temp/10; } for(Integer s:list)   sum+=Math.pow(s, k); if(sum==j&sum>n) { System.out.println(sum); System.exit(0); } } } public static int Count(int n) { int flag = n; int count = 0; while(flag>=1) { flag=flag/10; count++; } return count; } }
点赞
送花
回复 分享
发布于 2020-08-31 23:17
国泰君安
校招火热招聘中
官网直投

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务