京东,数据分析,第二题 求x*y=n的数


附上代码
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in); 
        int n = in.nextInt();
        if(n<1 || n>1000){  System.out.println("No");
        }
        int nows[] =new int[n];
        while(in.hasNext()){  for (int i=0;i<n;i++){  nows[i]=in.nextInt();  }  String[] res = get_res(nows);  for(String str:res){  System.out.println(str);  }
        }      
    }
    static String[] get_res(int[] nows){  String res[] = new String[nows.length];  for(int i =0;i<nows.length;i++){  //如果是2的次幂  if((nows[i]&(nows[i]-1))==0 || nows[i]<2 || nows[i]>Math.pow(2, 63)){  res[i]="No";  }else{  res[i]=get_x_y(nows[i]);  }  }  return res;
    }
    //得到一个数的x*y=n的所有值
    static String get_x_y(int n){  String res ="No";  int x=2,y=n;  while(x<y){  if(x*y==n){    //x和y的位置互换  if(x%2==0 && y%2!=0){  res = y+" "+x;  }  break;  }  else if(x*y<n){  x++;  }else if(x*y>n){  y--;  }  }  return res;
    }
}

全部评论
点赞 回复 分享
发布于 2018-04-09 21:32
点赞 回复 分享
发布于 2018-04-09 21:12
import java.util.Scanner; public class Main5 {     public static void main(String[] args) {         Scanner in = new Scanner(System.in);         int t = in.nextInt();         long[] arr = new long[t];         for (int i = 0; i < t; i++) {             arr[i] = in.nextLong();         }         for(long N : arr){             fun(N);         }     }     public static void fun(long N){         if(N%2 != 0){             System.out.println("No");             return ;         }         long X = 0;         long Y = 0;         for(int i=1;i<=N/2;i++){             Y = i*2;             if(N%Y == 0){                         X = N/Y;                 if(X%2!=0){                     System.out.println(X+" "+Y);                     return ;                 }             }         }     } 已AC通过!
点赞 回复 分享
发布于 2018-04-09 21:18
这题很简单吧。。xyn都用long存, 先判断n是不是奇数,是的话直接返回no 然后y从2开始,每次加2,判断x是不是奇数就行了
点赞 回复 分享
发布于 2018-04-09 21:22
不是说了不会是2的次幂吗
点赞 回复 分享
发布于 2018-04-09 21:09
本地测试通过,线上测评ac0%
点赞 回复 分享
发布于 2018-04-09 21:10
我是直接除2,直接除到不能除,然后不知道为什么一直不过!
点赞 回复 分享
发布于 2018-04-09 21:11
是这个意思嘛,Y是偶数,不一定是2的多少次啊,
点赞 回复 分享
发布于 2018-04-09 21:16
public class Main2 { public static void main(String[] args) { Scanner in = new Scanner(System.in); int N = Integer.parseInt(in.nextLine()); List<String> res = new ArrayList<>(); for (int i = 0; i < N; i++) { long v = in.nextLong(); if (v % 2 == 1) { res.add("No"); } else { long v1 = v; while (v1 % 2 == 0) { v1 = v1 / 2; } long v2 = v / v1; res.add(v1 + " " + v2); } } for (String word : res) { System.out.println(word); } } }
点赞 回复 分享
发布于 2018-04-09 21:17
分析一下最小的偶数只可能是2的幂就可以了
点赞 回复 分享
发布于 2018-04-09 21:27

相关推荐

10-17 10:05
已编辑
北华大学 全栈开发
牛客872465272号:掉头发了哥
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务