Javascript-如何将一个数字的所有首位和最后一位求和,直到只剩下两位数?

时间:2019-02-06 20:11:33

标签: javascript numbers calculation

我对编程还很陌生,只了解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.

我在两件事上挣扎。首先是while循环。我在考虑转换num.toString(),然后做一个while循环,在该循环中我再次将字符串更改为int:

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

但这不能正常工作,而且我想这会使我变得疯狂,因为我必须在每个新回合之间在字符串和整数之间切换,对吗?

我知道如何将所有数字加在一起,直到得到两位数的数字(花了一段时间才弄清楚这个数字),我什至不确定这是否是一个好方法:

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

但是显然我不能在这里使用它,我也不知道如何更改代码以便将第一位和最后一位数字加在一起。

3 个答案:

答案 0 :(得分:1)

稍有不同的方法:

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中的值并缩小它,这 最终将满足numString的while条件 少于2个字符
  • (4)将其余字符添加到 newString,根据字符的不同,可以为1或0个字符。 原始号码的长度
  • (5),如果您的newString大于2 字符,请再次运行此方法。否则返回您的结果

答案 1 :(得分:0)

尝试这个伙伴。它只是使用简单的for循环。它最多循环一半的数字,并加上相应的数字。根据您的逻辑,最终结果应为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)) 

答案 2 :(得分:0)

您可以使用嵌套的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));