在没有模运算符的Java中测试偶数

Posted

技术标签:

【中文标题】在没有模运算符的Java中测试偶数【英文标题】:Testing for even numbers in Java without modulo operator 【发布时间】:2012-11-26 17:58:55 【问题描述】:

我将如何在 Java 中做到这一点?判断一个数是否能被 2 整除,如果最后一位是偶数。 (0,2,4,6,8) 示例:128 是,129 不是

【问题讨论】:

【参考方案1】:

使用按位运算and

if( (number&1) == 0)

位与运算符 &

&(按位与)运算符将其第一个操作数的每一位与 第二个操作数的对应位。如果两个位都是 1,则 结果的相应位设置为 1。否则,它设置 对应的结果位为 0 (source)。

二进制格式中,偶数的最低有效位为零。知道这一点并使用 & 运算符,您可以找出它是否是偶数。

所以它需要一个数字 ..abcdy 并与 ..00001 进行比较,如果 y 为零,则 ..abcdy & ..00001 也为零,因此是偶数。

【讨论】:

【参考方案2】:

使用按位运算符查看最右边的位是否为 1,然后不是 1

执行逻辑与(例如)

yourNumber & 1

【讨论】:

【参考方案3】:

检查最低有效位:

boolean even = (x & 1) == 0;

对于偶数,LSB 是 0,对于奇数是 1,就像十进制数的最低有效位是 0,如果它可以被 10 整除。

【讨论】:

【参考方案4】:
if((n|1)==n)
  System.out.println("odd");
else
  System.out.println("even");

原因:如果 LSB 为 1,则数字为奇数,否则为奇数。当 n|1 完成时,奇数的 LSB 保持不变,因此结果数不变,而偶数的 LSB 变为 1,从而改变了数。

【讨论】:

【参考方案5】:

我的路;)

公共类 Even_Odd

/**
 * @param args
 */
public static void main(String[] args) 

    int val=550;
    // TODO Auto-generated method stub
    while(val>=0)
    
        if(val==1)
        
            System.out.println("Odd Number");
        
        else if(val==0)
        
            System.out.println("Even Number");
        

            val=val-2;
        //  System.out.println(val);

    

【讨论】:

这很酷.. 但是如果你有一个 15-20 位数字,while 循环会执行多少次。性能很糟糕。你应该学习更好的做事方式,尽管一开始很难学习。不只是你,而是作为一个程序。r【参考方案6】:

将数字除以 2 并乘以答案 2,如果得到原始数字,则数字为 “偶数”,否则那么数字是“奇数”

public class EvenOrOdd

    public static void main(String args[])
    
        int value = 129;

        if((value/2)*2==value)
        
            System.out.println("The Given Number \""+value+"\" is Even");
        
        else
        
            System.out.println("The Given Number \""+value+"\" is Odd");
        
    

【讨论】:

【参考方案7】:
import java.io.*;
import java.util.*;
public class CheckNumber
public static void main(String... args)throws IOException

    BufferedReader br=new BufferedReader(new InputStreamReader(System.in));

    System.out.println("Please enter the number to check even or odd");

    int number=Integer.parseInt(br.readLine());

    String temp=number+""; //convert number to string

    char ch=temp.charAt(temp.length()-1); //get last character

    temp=ch+"";

    if(temp.equals("0") || temp.equals("2") || temp.equals("4") || temp.equals("6") || temp.equals("8")) //check last number is even
        System.out.println("Number is even");
    else
        System.out.println("Number is odd");

【讨论】:

以上是关于在没有模运算符的Java中测试偶数的主要内容,如果未能解决你的问题,请参考以下文章

为什么求模运算要用素数(质数)

识别何时使用模运算符

winter 2018 02 01 关于模运算的一道题

位运算的运用场景使用总结

java中取余运算符 (%)

Python笔记-取模运算%