[关闭]
@yexiaoqi 2022-05-27T11:17:22.000000Z 字数 810 阅读 385

水仙花数

刷题 华为机试


题目:所谓的水仙花数是指一个n位的正整数其各位数字的n次方的和等于该数本身,例如153=1^3+5^3+3^3,153是一个三位数。

难度:*

输入描述:第一行输入一个整数N,表示N位的正整数N在3-7之间包含3,7,第二行输入一个正整数M,表示需要返回第M个水仙花数
输出描述:返回长度是N的第M个水仙花数,个数从0开始编号,若M大于水仙花数的个数返回最后一个水仙花数和M的乘积,若输入不合法返回-1

示例一

输入:3
     0
输出:153
说明:153是第一个水仙花数

示例二

输入:9
     1
输出:-1

  1. public class Main {
  2. static int[] min = {100,1000,10000,100000,1000000};
  3. static int[] max = {999,9999,99999,999999,9999999};
  4. public static void main(String[] args){
  5. Scanner sc = new Scanner(System.in);
  6. while(sc.hasNext()){
  7. int n = sc.nextInt();
  8. int m = sc.nextInt();
  9. if(n<3 || n>7){
  10. System.out.println(-1);
  11. } else {
  12. int count = -1;//因为m从0开始,所以count初始化为-1
  13. for (int i=min[n-3]; i<=max[n-3]; i++) {
  14. char[] arr = (i+"").toCharArray();
  15. int sum = 0;
  16. for (char c : arr) {
  17. int cnum = Integer.parseInt(c+"");
  18. sum += Math.pow(cnum, n);
  19. }
  20. if (i==sum && ++count==m) {
  21. System.out.println(i);
  22. break;
  23. }
  24. if (i == max[n - 3] && m > count)
  25. System.out.println(i * m);
  26. }
  27. }
  28. }
  29. }
  30. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注