programing

값이 홀수인지 짝수인지 테스트

sourcejob 2022. 9. 30. 11:07
반응형

값이 홀수인지 짝수인지 테스트

매우 간단한 알고리즘으로 간단한 isEven 및 isOdd 함수를 작성하기로 했습니다.

function isEven(n) {
  n = Number(n);
  return n === 0 || !!(n && !(n%2));
}

function isOdd(n) {
  return isEven(Number(n) + 1);
}

n이 특정 파라미터에 포함되어 있는 경우에는 문제가 없지만 많은 시나리오에서 실패합니다.그래서 가능한 한 많은 시나리오에서 정확한 결과를 얻을 수 있는 강력한 함수를 만들기 위해 javascript 수 제한 내의 정수만 테스트하고 다른 모든 것은 false(+ 및 - infinity 포함)를 반환했습니다.0은 짝수입니다.

// Returns true if:
//
//    n is an integer that is evenly divisible by 2
//
// Zero (+/-0) is even
// Returns false if n is not an integer, not even or NaN
// Guard against empty string

(function (global) {

  function basicTests(n) {

    // Deal with empty string
    if (n === '') 
      return false;

    // Convert n to Number (may set to NaN)
    n = Number(n);

    // Deal with NaN
    if (isNaN(n)) 
      return false;

    // Deal with infinity - 
    if (n === Number.NEGATIVE_INFINITY || n === Number.POSITIVE_INFINITY)
      return false;

    // Return n as a number
    return n;
  }

  function isEven(n) {

    // Do basic tests
    if (basicTests(n) === false)
      return false;

    // Convert to Number and proceed
    n = Number(n);

    // Return true/false
    return n === 0 || !!(n && !(n%2));
  }
  global.isEven = isEven;

  // Returns true if n is an integer and (n+1) is even
  // Returns false if n is not an integer or (n+1) is not even
  // Empty string evaluates to zero so returns false (zero is even)
  function isOdd(n) {

    // Do basic tests
    if (basicTests(n) === false)
      return false;

    // Return true/false
    return n === 0 || !!(n && (n%2));
  }
  global.isOdd = isOdd;

}(this));

위의 문제점을 알 수 있는 사람이 있습니까?더 나은 버전(더 정확한 버전, 더 빠른 버전 또는 더 간결한 버전)이 있습니까?

다른 언어에 관한 투고는 여러 가지가 있습니다만, ECMAScript의 확정판을 찾을 수 없는 것 같습니다.

계수 사용:

function isEven(n) {
   return n % 2 == 0;
}

function isOdd(n) {
   return Math.abs(n % 2) == 1;
}

Javascript의 모든 값이 다음 값을 가진 숫자로 강제될 수 있는지 확인할 수 있습니다.

Number.isFinite(parseFloat(n))

이 체크는 다음 주소 이외의 장소에서 실시하는 것이 바람직합니다.isEven그리고.isOdd두 기능 모두 오류 처리를 중복할 필요가 없습니다.

비트 테스트를 사용하는 것이 좋습니다.

if(i & 1)
{
    // ODD
}
else
{
    // EVEN
}

첫 번째 비트가 홀수를 나타내고 있는지 여부를 테스트합니다.

아래는 어떻습니까?IE에서만 테스트했습니다만, 임의의 길이의 숫자, 정수 또는 플로트인 실제 숫자, 부울, 정의되지 않은, 늘, 배열 또는 개체를 통과하면 두 함수가 false를 반환하는 것을 매우 기쁘게 생각했습니다.(문자열이 전달되었을 때 선행 공백과 후행 공백 중 어느 쪽을 무시할지, 두 함수가 모두 false를 반환하는 것은 아니라고 가정합니다.)

function isEven(n) {
   return /^-?\d*[02468]$/.test(n);
}

function isOdd(n) {
   return /^-?\d*[13579]$/.test(n);
}

주의: 음수도 있습니다.

function isOddInteger(n)
{
   return isInteger(n) && (n % 2 !== 0);
}

어디에

function isInteger(n)
{
   return n === parseInt(n, 10);
}

왜 이렇게 하지 않는 거죠?

    function oddOrEven(num){
        if(num % 2 == 0)
            return "even";
        return "odd";
    }
    oddOrEven(num);

로버트 브리시타의 비트 테스트를 완료하기 위해.

if ( ~i & 1 ) {
    // Even
}
var isOdd = x => Boolean(x % 2);
var isEven = x => !isOdd(x);
var isEven = function(number) {
    // Your code goes here!
    if (number % 2 == 0){
       return(true);
    }
    else{
       return(false);    
    }
};

코드 한 줄만 있으면 돼!

여기에서는 JS 함수에 대해 새로운 ES6 구문을 사용하고 JS 함수에 대해 한 줄 구문을 사용하는 새롭고 대체적인 방법을 보여 줍니다.if-else스테이트먼트 콜:

const isEven = num => ((num % 2) == 0);

alert(isEven(8));  //true
alert(isEven(9));  //false
alert(isEven(-8)); //true

Steve Mayne 답변의 간단한 수정/개량!

function isEvenOrOdd(n){
    if(n === parseFloat(n)){
        return isNumber(n) && (n % 2 == 0);
    }
    return false;
}

참고: 유효하지 않은 경우 false를 반환합니다.

조금

x % 2 == 0; // Check if even

!(x & 1); // bitmask the value with 1 then invert.

((x >> 1) << 1) == x; // divide value by 2 then multiply again and check against original value

~x&1; // flip the bits and bitmask

다른 방법:

var isEven = function(number) {
  // Your code goes here!
  if (((number/2) - Math.floor(number/2)) === 0) {return true;} else {return false;};
};

isEven(69)

다른 방법으로는 스트링을 사용합니다.왜냐하면

function isEven(__num){
    return String(__num/2).indexOf('.') === -1;
}
if (testNum == 0);
else if (testNum % 2  == 0);
else if ((testNum % 2) != 0 );

이거요? 만약 (우리 번호 % 2!== 0)

var num = someNumber
    isEven;
parseInt(num/2) === num/2 ? isEven = true : isEven = false;

for(var a=0; a<=20;a++){
   if(a%2!==0){
       console.log("Odd number "+a);
   }
}

for(var b=0; b<=20;a++){
    if(b%2===0){
        console.log("Even number "+b);  
    }     
 }

번호가 짝수 코드 행에 있는지 확인합니다.

var iseven=(_)=>_%2==0

홀수인지 짝수인지 여부를 테스트하기 위해 이 방법도 사용할 수 있습니다.

const comapare = x => integer(checkNumber(x));

function checkNumber (x) {
   if (x % 2 == 0) {
       return true;
   } 
   else if (x % 2 != 0) {
       return false;
    }
}

function integer (x) {
   if (x) {
       console.log('even');
   } 
   else {
       console.log('odd');
    }
}

최신 Javascript 스타일 사용:

const NUMBERS = "nul one two three four five six seven ocho nueve".split(" ")

const isOdd  = n=> NUMBERS[n % 10].indexOf("e")!=-1
const isEven = n=> isOdd(+n+1)
if (i % 2) {
return odd numbers
}

if (i % 2 - 1) {
return even numbers
}

이게 더 간단해!

  var num = 3 //instead get your value here
  var aa = ["Even", "Odd"];

  alert(aa[num % 2]);
function isEven(n) {return parseInt(n)%2===0?true:parseInt(n)===0?true:false}

0/짝수 원했을 때

isEven(0) //true
isEven(1) //false
isEven(2) //true
isEven(142856) //true
isEven(142856.142857)//true
isEven(142857.1457)//false

언급URL : https://stackoverflow.com/questions/6211613/testing-whether-a-value-is-odd-or-even

반응형