সংখ্যাটি সমান বা বিজোড় কিনা তা পরীক্ষা করে দেখুন


128

আমি কীভাবে নির্ধারণ করব যে প্রদত্ত নম্বরটি সমান বা বিজোড়? আমি এখনই এটি দীর্ঘকাল ধরে খুঁজে পেতে চাই এবং কোথাও পাইনি।

উত্তর:


200

আপনি মডুলাস অপারেটরটি ব্যবহার করতে পারেন তবে এটি ধীর হতে পারে। এটি যদি পূর্ণসংখ্যা হয় তবে আপনি এটি করতে পারেন:

if ( (x & 1) == 0 ) { even... } else { odd... }

এটি কারণ কম বিট সর্বদা একটি বিজোড় সংখ্যায় সেট করা হবে।


23
এটি এখনও আমাকে অবাক করে দেয় যে লোকেরা কেবল সংখ্যাটির প্রথম বিটটি পরীক্ষা করার চেয়ে মডুলাস পছন্দ করে। স্পষ্টতই যদি প্রথম বিটটি সেট করা থাকে তবে অবশ্যই সংখ্যাটি বিজোড় হতে হবে। এটি সাধারণত দ্রুত হয়, এবং এটি আমার মতে ঠিক একইভাবে পড়ে। আমি মনে করি অন্যরা মডুলাসের চেয়ে এটি পছন্দ না করার কারণ বাইনারি বোঝার অভাবের দিকে চলে আসে।
ক্রাশ করুন

5
@ ডিটেক আমি মনে করি আপনি অকাল অপটিমাইজেশনের অর্থ ভুল বোঝেন। আপনি যদি আগেই জানেন যে একটি পদ্ধতি অন্যটির চেয়ে বেশি পারফরম্যান্ট, তবে আরও পারফরম্যান্ট পদ্ধতিটি ব্যবহার করা অকালীন অপ্টিমাইজেশন নয়। এটা বুদ্ধিমান। এটি বলেছিল, প্রথম বিটটি চেক করা যখন মডুলাস ব্যবহারের চেয়ে সহজ / বিজোড়ের জন্য কেবল চেক করা হয় তার চেয়ে বেশি যুক্তিসঙ্গত কী তা সম্পর্কে আমার মন্তব্য ছিল। সমস্যাটি হ'ল অনেক প্রোগ্রামার কোন পদ্ধতিটি কী তা বুঝতে পারে না এবং কেবল টিউটোরিয়াল অনুসরণ করে।
ক্রাশ করুন

54
@ ক্রাশ n % 2 == 0অর্থহীন অর্থ Divide by 2 and check if the remainder is 0, n & 1 == 0যা এর অর্থের তুলনায় অনেক পরিষ্কার Zero all the bits but leave the least significant bit unchanged and check if the result is 0। প্রথমটির উন্নত স্পষ্টতা ওভারহেডের (সম্ভবত অ-অস্তিত্বহীন) মূল্যবান। অকাল অপটিমাইজেশন বলতে আমি এটাই বুঝি। যদি কিছু ধীর এবং আপনি যে অংশ এটা প্রোফাইলে পরিবর্তন n % 2করার জন্য n & 1অবশ্যই সমর্থনযোগ্য, কিন্তু এটি পূর্বেই করছেন নয়। বিট অপারেটরদের সাথে সাধারণভাবে কাজ করা প্রোফাইলিংয়ের আগে একটি খারাপ ধারণা।
dtech

18
@ ডিটেক প্রথমত, আপনার মতামত সম্পূর্ণ বিষয়গত। সর্বোপরি, আপনি "অকাল অপ্টিমাইজেশন" এর অর্থ কী তা এখনও বুঝতে পারেন না। এটি অবশ্যই একটি মাইক্রো অপ্টিমাইজেশন। এটি অকাল অপটিমাইজেশন নয়। অকাল অপটিমাইজেশন বিদ্যমান কোডটি অকার্যকর তা দেখতে প্রথমে প্রোফাইলিং না করে "অপ্টিমাইজেশন" দিয়ে বিদ্যমান কোডটি সংশোধন করছে। যাইহোক, আগেই জেনে রেখেছিলাম যে এক দিকের সাথে বনাম অন্যভাবে লিখিত কোড করা আরও কার্যকর, এবং আরও কার্যকর কোড ব্যবহার করা পছন্দ করা অকালীন অপটিমাইজেশন নয়। এটা আপনার বিষয়ী মতামত যে n % 2 == 0হয় ক্লিনার তুলনায় n & 1 == 0
ক্রাশ করুন

15
আমি এখানে আসার লোকদের জন্য কেবল উল্লেখ করতে চাই যে মডিউল অপারেটরটি ব্যবহার করা ভাল, তবে আপনি যদি বিজোড়তা পরীক্ষা করতে এটি ব্যবহার করেন তবে n% 2 = = 0 লিখুন, n% 2 == 1 না, কারণ পরবর্তীটি জাভাতে নেতিবাচক সংখ্যার জন্য কাজ করে না।
Jxek


30

যদি আপনি 2 দ্বারা ভাগ করে যখন বাকি হয় 0 হয়, এটি সমান। %অপারেটর একটি বাকী পেতে।


12
% অপারেটরকে মডুলো বলা হয়।
অ্যান্টনি

4
@ অ্যান্টনি: আসলে, এটি "বাকী অপারেটর"
রায়ান স্টুয়ার্ট

3
গাণিতিক শব্দটি মডুলাস, এবং এটি বাকীটি পাওয়ার চেয়ে ব্যাপক-প্রয়োগযোগ্যতা রয়েছে। (A % B)নিজেই একটি অভিব্যক্তি হিসাবে ব্যবহার করা যেতে পারে, এবং তখনই জিনিসগুলি মজা পায়।
স্টিফান কেন্ডাল

2
@ স্টেফান: আমি বিন্দুটি বেলব না, তবে গণিতবিদরা এই বিষয়টির দিকে ঝুঁকছেন যে মডুলার গাণিতিকের ক্ষেত্রে মডুলাস এবং বাকী অংশগুলি একই জিনিস নয়
রায়ান স্টুয়ার্ট

2
@ স্টেফানকেনডাল জাভা ল্যাঙ্গুয়েজ স্পেসিফিকেশন পরীক্ষা করুন # 15.17.3 । গুগল কোনও আদর্শিক রেফারেন্স নয়।
মারকুইস

24

অবশিষ্ট অপারেটর,%, আপনাকে একটি সংখ্যার দ্বারা ভাগ করার পরে অবশিষ্টটি দেবে।

তাই n % 2 == 0সত্য হতে হবে এন এমনকি এবং মিথ্যা যদি n বিজোড় হয়।


21

দশমিক দশমিক (তবে দশমিক, যদি উপস্থিত থাকে তবে এটি অবশ্যই সমান হওয়া উচিত) নির্বিশেষে প্রতিটি সমান সংখ্যা দুটি দ্বারা বিভাজ্য। সুতরাং আপনি %(মডুলো) অপারেটরটি ব্যবহার করতে পারেন , যা বাম দিকে সংখ্যাটি ডানদিকে সংখ্যা দ্বারা বিভক্ত করে এবং বাকীটি ফেরত দেয় ...

boolean isEven(double num) { return ((num % 2) == 0); }

1
'এটি দশমিক কিনা তা নির্বিশেষে' অর্থহীন। দশমিক একটি মূলত। আপনার অর্থ কী 'ভগ্নাংশের অংশ রয়েছে'?
মারকুইস

4

আমি সুপারিশ করতাম

জাভা পাজলার্স: জোশুয়া ব্লাচ এবং নীল গিটোয়ারের ফাঁদ, পিটফলস এবং কর্নার কেস বই

সংখ্যার বিজোড় হয় কিনা তা কীভাবে পরীক্ষা করতে হয় তার সংক্ষিপ্ত বিবরণ রয়েছে। @ অসীম ইয়াদভ যা চেষ্টা করেছিলেন তা প্রথম চেষ্টা:

public static boolean isOdd(int i) {
     return i % 2 == 1;
}

তবে যেমনটি বইয়ে উল্লেখ করা হয়েছে:

যখন বাকী অপারেশন কোনও ননজারো ফলাফল দেয়, তখন এটির বাম অপারেণ্ডের মতো একই চিহ্ন রয়েছে

সুতরাং সাধারণত যখন আমাদের নেতিবাচক বিজোড় সংখ্যা হয় তার পরিবর্তে 1 আমরা -1ফলাফল হিসাবে পেয়ে যাব i%2। সুতরাং আমরা @ ক্যামিলো সমাধানটি ব্যবহার করতে পারি বা কেবল করতে পারি:

public static boolean isOdd(int i) {
     return i % 2 != 0;
}

তবে সাধারণত দ্রুততম সমাধানটি @ লিউকস্মো র উপরে লিখিত ও অপারেটর ব্যবহার করে:

public static boolean isOdd(int i) {
     return (i & 1) != 0;
}

@Edit এটি বিন্দু মূল্য Math.floorMod(int x, int y);যা নেতিবাচক সঙ্গে ভাল পুলিশ লভ্যাংশ কিন্তু আসতে পারেন -1যদি ভাজক নেতিবাচক


2

ধনাত্মক বা নেতিবাচক সংখ্যার জন্য কাজ করে

int start = -3;
int end = 6;

for (int val = start; val < end; val++)
{
    // Condition to Check Even, Not condition (!) will give Odd number
    if (val % 2 == 0) 
    {
        System.out.println("Even" + val);
    }
    else
    {
        System.out.println("Odd" + val);
    }
}

2

সংখ্যাটি সমান বা বিজোড় কিনা তা পরীক্ষা করতে সর্বনিম্ন উল্লেখযোগ্য বিট (ডানদিকে) ব্যবহার করা যেতে পারে। সমস্ত বিজোড় সংখ্যার জন্য বাইনারি উপস্থাপনায় সর্বদা ডানদিকে 1

public static boolean checkOdd(long number){
   return ((number & 0x1) == 1);
}

2

এই নিম্নলিখিত প্রোগ্রামটি বিশাল সংখ্যক (20 এর চেয়ে বেশি সংখ্যার সংখ্যার) পরিচালনা করতে পারে

package com.isEven.java;
import java.util.Scanner;

public class isEvenValuate{

public static void main(String[] args) {            

        Scanner in = new Scanner(System.in);
        String digit = in.next();

        int y = Character.getNumericValue(digit.charAt(digit.length()-1));

        boolean isEven = (y&1)==0;

        if(isEven)
            System.out.println("Even");
        else
            System.out.println("Odd");

    }
}

এখানে আউটপুট ::

  122873215981652362153862153872138721637272
  Even

1

আপনি মডুলাস অপারেটরটি ব্যবহার করতে পারেন তবে এটি ধীর হতে পারে। আরও কার্যকর উপায় হ'ল সর্বনিম্ন বিটটি পরীক্ষা করা কারণ এটি নির্ধারণ করে যে একটি সংখ্যা সমান বা বিজোড় কিনা। কোডটি এরকম কিছু দেখাচ্ছে:

public static void main(String[] args) {        
    System.out.println("Enter a number to check if it is even or odd");        
    System.out.println("Your number is " + (((new Scanner(System.in).nextInt() & 1) == 0) ? "even" : "odd"));        
}

1

আপনি এটির মতো করতে পারেন:

boolean is_odd(int n) {
    return n % 2 == 1 || n % 2 == -1;
}

এটি কারণ জাভাটির মডুলো অপারেশনে লভ্যাংশের চিহ্ন, বাম দিকে: এন। তাই নেতিবাচক এবং ধনাত্মক লভ্যাংশের জন্য, মডুলোগুলির মধ্যে তাদের সাইন রয়েছে।

অবশ্যই, বিটওয়াইজ অপারেশনটি দ্রুত এবং অপ্টিমাইজড, কেবল দুটি বা তিনটি সংক্ষিপ্ত শব্দের সাথে কোডের লাইনটি ডকুমেন্ট করে, যা এটি পাঠযোগ্যতার জন্য করে does


একে বাকি অপারেটর বলা হয় , মডুলো অপারেটর নয়।
মারকুইস লর্ন

1

/ অন্য শর্তটি ব্যবহার না করে এটি করার আর একটি সহজ উপায় (ধনাত্মক এবং negativeণাত্মক উভয় সংখ্যার জন্যই কাজ করে):

int n = 8;
List<String> messages = Arrays.asList("even", "odd");

System.out.println(messages.get(Math.abs(n%2)));

একটি বিজোড় নংয়ের জন্য, এক্সপ্রেশনটি '1' কে অবশিষ্ট হিসাবে প্রদান করবে giving

messages.get (1) = 'বিজোড়' এবং তাই 'বিজোড়' মুদ্রণ

অন্যথায়, 'এমনকি' মুদ্রণ করা হয় যখন এক্সপ্রেশন ফলাফল '0' এর সাথে আসে


1
এই প্রশ্নটি জাভা হিসাবে ট্যাগ করা হয়েছিল। আপনি পাইথনে একটি উত্তর পোস্ট করেছেন। সত্যিই যে দরকারী না।
চিহ্নিত করুন

আরে @ মার্ক! এটি নির্দেশ করার জন্য ধন্যবাদ, উত্তর সম্পাদনা করা। আশা করি, এটি এখনও কারওর জন্য সহায়ক হতে পারে।
অসীম যাদব

1
এটা সহজেই উদাহরণস্বরুপ ক্র্যাশ করা যেতে পারে: int n = -3;। @ ক্যামিলো নীচে উল্লিখিত হিসাবে - যখন বাকি অপারেশন কোনও ননজারো ফলাফল ফেরত দেয়, তখন এটির বাম অপারেন্ডের মতো একই চিহ্ন রয়েছে যাতে জেনারেলভাবে আমাদের System.out.println(messages.get(-1));যা দেয়java.lang.ArrayIndexOutOfBoundsException
মিচু 9৩

1

যদি প্রদত্ত সংখ্যার মডুলাসটি শূন্যের সমান হয় তবে সংখ্যাটি অন্য কোনও বিজোড় সংখ্যা। নীচে যে পদ্ধতিটি করে তা নীচে:

public void evenOrOddNumber(int number) {
  if (number % 2 == 0) {
    System.out.println("Number is Even");
   } else {
    System.out.println("Number is odd");
  }
 }

0
package isevenodd;
import java.util.Scanner;
public class IsEvenOdd {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.println("Enter number: ");
        int y = scan.nextInt();       
        boolean isEven = (y % 2 == 0) ? true : false;
        String x = (isEven) ? "even" : "odd";  
        System.out.println("Your number is " + x);
    }
}

উদ্দেশ্য কি '?' সাইন
রানা তালহা তারিক

0

প্রদত্ত সংখ্যাটি সমান বা বিজোড় কিনা তা নির্ধারণ করার জন্য এখানে একটি উদাহরণ রয়েছে,

import java.util.Scanner;

public class EvenOdd
{
   public static void main(String[] args)
   {
      int a;
      System.out.println("Please enter a number to check even or odd:");
      Scanner sc = new Scanner(System.in);
      a = sc.nextInt();

      if(a % 2 == 0)
      {
         System.out.println("Entered number is an even number");
      }
      else
      {
         System.out.println("Entered number is an odd number");
      }
   }
}

ঠিক আছে, একই নির্ধারণ করার জন্য অনেকগুলি উপায় রয়েছে। পড়ুন এই আরো উদাহরণ জন্য সম্পদ প্রদত্ত সংখ্যার জোড় না বিজোড় হয় খুঁজে পেতে।


0

এখানে সম্পূর্ণ উদাহরণ:

import java.text.ParseException;

public class TestOddEvenExample {
    public static void main(String args[]) throws ParseException {

        int x = 24;
        oddEvenChecker(x);

        int xx = 3;
        oddEvenChecker(xx);
    }

    static void oddEvenChecker(int x) {
        if (x % 2 == 0)
            System.out.println("You entered an even number." + x);
        else
            System.out.println("You entered an odd number." + x);
    }
}

এখানে চিত্র বর্ণনা লিখুন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.