我对编程还很陌生,只了解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);
但是显然我不能在这里使用它,我也不知道如何更改代码以便将第一位和最后一位数字加在一起。
答案 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
发生的事情的简要说明:
newString
numString
,因为它们已保存到newString
。因为
您正在覆盖numString
中的值并缩小它,这
最终将满足numString
的while条件
少于2个字符newString
,根据字符的不同,可以为1或0个字符。
原始号码的长度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));