Вывод четных и нечетных цифр и сумма

99
24 января 2022, 01:30

не могу решить вопрос. Суть, нужно написать функцию которя будет принимать число и значение 'odd' или 'even' И так же посчитает всю сумму четных и нечетных цифр в зависимости от odd или even . Вот так должно быть : пусть я ввел 123456 и odd - соответсвеноо в консоле у меня должно появиться --- 1 Нечетные - 1, 3 , 5. --- 2 Сумма - 9. И тоже самое с even. Я написал код, который работает, но я там очень сильно намудрил и запутался вообще.

function summ (number, evenOrOdd ) { 
  let resultOdd = ''; 
  let resultEven = ''; 
  let resultCycleOdd = 0; 
  let resultCycleEven = 0; 
 
  if (evenOrOdd === 'odd') { 
    evenOrOdd = number.toString(); 
  for (let i = 0; i < evenOrOdd.length; i++) { 
    if (/[1357]/.test(evenOrOdd[i])) { 
      resultOdd = resultOdd   + evenOrOdd[+i] ;   
  } 
      number = +resultOdd; 
      let sum = 0; 
      while (number > 0) { 
      sum += number % 10; 
      number = Math.floor(number/10); 
      resultCycleOdd = sum; 
  } 
    } 
  console.log('Не парні' + ' ' + resultOdd);  
  console.log('Сумма'+ ' ' +resultCycleOdd); 
} 
  if (evenOrOdd === 'even') { 
    evenOrOdd = number.toString(); 
  for (let i = 0; i < evenOrOdd.length; i++) { 
    if (/[2468]/.test(evenOrOdd[i])) { 
      resultEven = resultEven  + evenOrOdd[i] ;   
} 
      number = +resultEven; 
      let sum = 0; 
      while (number > 0) { 
      sum += number % 10; 
      number = Math.floor(number/10); 
      resultCycleEven = sum; 
      } 
  } 
  console.log('Парні' + ' ' +resultEven); 
  console.log('Сумма'+ ' ' +resultCycleEven); 
  } 
} 
summ(123456789, 'even');

Answer 1

Освобождаем код от ненужных переменных и приведений к строке

function summ(num, evenOrOdd) {
  var resultLabel = [];
  var resultValue = 0;
  var isEven = evenOrOdd === 'even';
  while (num > 0) {
    var lastDigit = num % 10
    if ( (isEven && ( lastDigit % 2 === 0)) || (!isEven && (lastDigit % 2 === 1))) {
       resultLabel.push(lastDigit);
       resultValue += lastDigit;
       num = (num - lastDigit) / 10;
    }
  }
  console.log(isEven ? 'Парні: ' : 'Непарні: ', resultLabel.join(', '));
  console.log('Сума: ', resultValue );
}
summ(12345, 'even')
summ(12345, 'odd')

За основу взял код из ответа Ofer.

Answer 2

Немного функциональщины:

sum = (nums, type) => (nums + '').split('').filter(e => type === 'even' && e % 2 === 0 || type === 'odd' && e % 2 === 1).reduce((a, c) => a + (+c), 0); 
console.info(sum(123456, 'even'), // 2 + 4 + 6 = 12 
sum(123456, 'odd'));              // 1 + 3 + 5 = 9

Answer 3

function summ(num, evenOrOdd) { 
  var resultLabel = []; 
  var resultValue = 0; 
  var numStr = num.toString(); 
  var numLength = numStr.length; 
  var isEven = evenOrOdd === 'even'; 
 
  for(var i = 0; i < numLength; i++) { 
    if ( (isEven && (i % 2 === 1)) || (!isEven && (i % 2 === 0))) { 
      resultLabel.push(numStr[i]); 
      resultValue += +numStr[i]; 
    } 
  } 
   
  console.log(isEven ? 'Парні: ' : 'Непарні: ', resultLabel.join(', ')); 
  console.log('Сума: ', resultValue ); 
} 
 
summ(12345, 'even') 
summ(12345, 'odd')

Answer 4

function getSum(string){ 
    let sum =0; 
    for(s of string){ 
        sum= isNaN(parseInt(s)) ? sum+0:sum+parseInt(s); 
    }     
    return sum; 
} 
function getNumbers(numbers,order){ 
    var num = String(numbers).split(""), 
    	res = order+' '; 
    num.forEach(function(e,k){ 
    	if (order=="odd"){ 
            if ((e % 2) === 1) { 
            	res += e; 
            }	 
        }  
        else if (order=="even"){ 
            if ((e % 2) === 0) { 
            	res += e; 
            } 
        } 
    }); 
    res += ', sum = '+getSum(res); 
    return res; 
} 
 
console.log(getNumbers(1234567,'odd'));

READ ALSO