Javascript - Как суммировать все первые и последние цифры числа, пока не останется только две цифры? - PullRequest
0 голосов
/ 06 февраля 2019

Я довольно новичок в программировании, просто знаю основы Javascript и Swift.Я пытаюсь написать простую программу, которая создает из любого введенного числа двухзначное число, суммируя первую и последнюю цифры, пока в итоге не останутся только две цифры.

Вот пример:

num = 1234567:

1+7 = 8
2+6 = 8
3+5 = 8
4 remains

So the first result is: 8884. Now everything is added again:

8+8 = 16
8+4 = 12

The result is 1612. Again everything is summed up:

1+2 = 3
6+1 = 7

The result is 37 - which is also the final result.

Я борюсь с двумя вещами.Сначала пока цикл.Я думал о приведении num.toString () и затем сделал цикл while, подобный этому, в котором я снова меняю строку на int:

num.toString()
while (num.length > 2) {
    num = num.parseInt(num, 10);
    ...
}

Но это не работает должным образом, плюс это сводит с умасложно, я думаю, потому что мне нужно переключаться между строкой и int каждый новый раунд, верно?

Я знаю, как сложить все цифры вместе, пока не получу двузначное число (мне понадобилось время, чтобы понять этои я даже не уверен, что это хороший способ сделать это:

var sum = num
    .toString()
    .split('')
    .map(Number)
    .reduce(function (a, b) {
        return a + b;
    }, 0);

Но, очевидно, я не могу использовать это здесь, и я не знаю, как изменить код так, чтобы первый и последнийцифры складываются вместе.

Ответы [ 3 ]

0 голосов
/ 06 февраля 2019

Немного другой подход:

function sum(num) {
  var numString = num.toString();
  var newString = "";
  while (numString.length > 1) { // (1)
    newString += (parseInt(numString[0]) + parseInt(numString[numString.length - 1])).toString(); // (2)
    numString = numString.substring(1, numString.length - 1); // (3)
  }
  newString += numString; // (4)

  if (newString.length > 2) { // (5)
    console.log(newString)
    return sum(newString);
  } else {
    return newString;
  }
}


console.log(sum(1234567));

Выходы:

8884
1216
73

Краткое объяснение происходящего:

  • (1) Ваш цикл while будет обрабатыватьсядо тех пор, пока не останется 1 или 0 символов
  • (2) Добавьте сумму вашего первого и последнего символа к вашему newString
  • (3) Удалите первый и последний символы из вашегоnumString теперь, когда они были сохранены в newString.Поскольку вы перезаписываете значение в numString и сжимаете его, это в конечном итоге удовлетворяет условию while для numString с менее чем 2 символами
  • (4) Добавьте оставшиеся символы в newString,который будет либо 1, либо 0 символов в зависимости от длины исходного числа
  • (5), если ваш newString содержит более 2 символов, запустите этот метод еще раз.В противном случае верните ваш результат
0 голосов
/ 07 февраля 2019

Вы можете взять вложенный цикл while и проверить длину строки для внешнего цикла и левый и правый индексы для внутреннего цикла

function add(n) {
    var s = n.toString(),
        l, r,
        sum;
    
    while (s.length > 2) {
        l = 0;
        r = s.length - 1;
        sum = [];
        while (l < r) {
            sum.push(+s[l++] + +s[r--]);
        }
        if (l === r) sum.push(s[l]);
        s = sum.join('');
    }
    return +s;
}

console.log(add(1234567));

То же самое, но с рекурсивной функцией.

function add(n) {
    var s = n.toString(),
        l = 0, r = s.length - 1,
        sum = [];
    
    if (s.length <= 2) return n;
    while (l < r) sum.push(+s[l++] + +s[r--]);
    if (l === r) sum.push(s[l]);
    return add(+sum.join(''));
}

console.log(add(1234567));
0 голосов
/ 06 февраля 2019

Попробуйте этот приятель.Это просто с помощью простого цикла.Его циклы до половины числа и добавить соответствующие.Окончательный результат в соответствии с вашей логикой должен быть 73, а не 37

function sum(num){
        //if num is greater than or equal to 2 end the function and return final value
	if(num.length <= 2) return num;
        //converting the num to string beacuse first time input will be number
	num = String(num);
	let result = '';
        //creating a loop upto half of length of the num
	for(let i = 0;i<num.length/2;i++){
                //if the number is not middle one
		if(i !== num.length - 1 - i)
		{
                        //adding the sum of corresponding numbers to result
			result += parseInt(num[i]) + parseInt(num[num.length - 1 - i]);
		}
                //if the number is middle number just add it to result			
                else result += num[i] 
	}
	return sum(result);
}   
console.log(sum(1234567)) 
...