A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 马铿 中级黑马   /  2012-12-18 11:13  /  1681 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 马铿 于 2013-3-15 13:07 编辑

如题:有个数为5,用最快速度样判断这个数是奇数还是偶数

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

11 个回复

倒序浏览
本帖最后由 孙辉辉 于 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.       }
复制代码

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

回复 使用道具 举报
%  
  
if(x%2==0){
      System.out.println("偶数");
}
else{
      System.out.println("奇数");
}

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 刪除記忆ご 于 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.     }
复制代码
感觉楼上写的不完整,当为负数的时候,应该取其绝对值再进行判断!

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

回复 使用道具 举报
王斌 发表于 2012-12-18 11:26
%  
  
if(x%2==0){

这个方法不快
回复 使用道具 举报
刪除記忆ご 发表于 2012-12-18 11:27
感觉楼上写的不完整,当为负数的时候,应该取其绝对值再进行判断!

你可以测试下。。。-5的时候返回的是false  这个只是判断最后一位
回复 使用道具 举报
王晨 高级黑马 2012-12-18 11:34:20
7#
孙辉辉 发表于 2012-12-18 11:33
你可以测试下。。。-5的时候返回的是false  这个只是判断最后一位

额,好吧,我搞错了!学习了……
回复 使用道具 举报
进行&运算似乎是比较快的!
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);
        }
}

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

回复 使用道具 举报
康乐 中级黑马 2012-12-18 12:01:29
9#
本帖最后由 康乐 于 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 &运算遮盖掉了。这就是所谓的“位屏蔽”

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

回复 使用道具 举报
可以用取模运算符 %2  看余数 当然用位运算符更高效  像楼上说的那样

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马