黑马程序员技术交流社区

标题: 奇偶问题 [打印本页]

作者: 马铿    时间: 2012-12-18 11:13
标题: 奇偶问题
本帖最后由 马铿 于 2013-3-15 13:07 编辑

如题:有个数为5,用最快速度样判断这个数是奇数还是偶数
作者: 孙辉辉    时间: 2012-12-18 11:18
本帖最后由 孙辉辉 于 2012-12-18 11:21 编辑

家都知道,奇数的最低位一定是1,而偶数的最低位一定是0.所以我们可以根据这个特性,让需要判定的整数和1进行“与”运算,这样就只留下了原数的最低位,然后直接判断这个数等于1还是等于0即可。
  1. public static boolean IsEven(int i)
  2.       {
  3.           return (i & 1) == 0;//如果是偶数就返回true
  4.       }
复制代码

作者: 王斌    时间: 2012-12-18 11:26
%  
  
if(x%2==0){
      System.out.println("偶数");
}
else{
      System.out.println("奇数");
}
作者: 王晨    时间: 2012-12-18 11:27
本帖最后由 刪除記忆ご 于 2012-12-18 11:28 编辑

  1. static boolean test(int i) {
  2.         if(i>=0)
  3.         return (i & 1) == 0;//
  4.         else
  5.             return Math.abs(i)%& 1==0;
  6.     }
复制代码
感觉楼上写的不完整,当为负数的时候,应该取其绝对值再进行判断!
作者: 马铿    时间: 2012-12-18 11:28
王斌 发表于 2012-12-18 11:26
%  
  
if(x%2==0){

这个方法不快
作者: 孙辉辉    时间: 2012-12-18 11:33
刪除記忆ご 发表于 2012-12-18 11:27
感觉楼上写的不完整,当为负数的时候,应该取其绝对值再进行判断!

你可以测试下。。。-5的时候返回的是false  这个只是判断最后一位
作者: 王晨    时间: 2012-12-18 11:34
孙辉辉 发表于 2012-12-18 11:33
你可以测试下。。。-5的时候返回的是false  这个只是判断最后一位

额,好吧,我搞错了!学习了……
作者: 郭金龙    时间: 2012-12-18 11:48
进行&运算似乎是比较快的!
class test
{
        public static void main(String[] args)
        {
                int i = 5;
                String s = null;

                if((i & 1) == 1){
                         s =i+ "是奇数";
                }else{
                        s =i+ "是偶数";
                }

                System.out.println(s);
        }
}

作者: 康乐    时间: 2012-12-18 12:01
本帖最后由 康乐 于 2012-12-18 12:06 编辑
  1. import java.io.*;

  2. class OddDecider
  3. {
  4.         public static void main(String[] args) throws IOException
  5.         {
  6.                 BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));

  7.                 System.out.println("请输入数字");
  8.                 int number = Integer.parseInt(bufr.readLine());

  9.                 System.out.println(((number&1)== 0)?"是偶数":"不是偶数");
  10.         }
  11. }
复制代码
原理是奇数数值若以二进制来表示,其最右边的位必为1,而偶数最右边的位为0.使用1与输入的值做and运算,其他位的结果都是0,只会留下最右边的位的结果。其他部分都被0 &运算遮盖掉了。这就是所谓的“位屏蔽”
作者: 依然AI    时间: 2012-12-18 12:21
可以用取模运算符 %2  看余数 当然用位运算符更高效  像楼上说的那样




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2