我正在尝试解决一个数学问题,其中我取一个数字,例如45
, or111
然后将数字拆分为单独的数字,例如4 5
或1 1 1
。然后我会将每个数字保存到一个 var 中以运行一个方法。有谁知道如何将数字拆分为单独的数字?
例如,我有一个在数组上运行的循环:
for (var i = 0; i < range.length; i++) {
var n = range[i];
}
对于每个数字,我想拆分其数字并将它们加在一起?
我正在尝试解决一个数学问题,其中我取一个数字,例如45
, or111
然后将数字拆分为单独的数字,例如4 5
或1 1 1
。然后我会将每个数字保存到一个 var 中以运行一个方法。有谁知道如何将数字拆分为单独的数字?
例如,我有一个在数组上运行的循环:
for (var i = 0; i < range.length; i++) {
var n = range[i];
}
对于每个数字,我想拆分其数字并将它们加在一起?
var num = 123456;
var digits = num.toString().split('');
var realDigits = digits.map(Number)
console.log(realDigits);
var number = 12354987,
output = [],
sNumber = number.toString();
for (var i = 0, len = sNumber.length; i < len; i += 1) {
output.push(+sNumber.charAt(i));
}
console.log(output);
/* Outputs:
*
* [1, 2, 3, 5, 4, 9, 8, 7]
*/
更新:计算总和
for (var i = 0, sum = 0; i < output.length; sum += output[i++]);
console.log(sum);
/*
* Outputs: 39
*/
您也可以以“数学”方式进行操作,而无需将数字视为字符串:
var num = 278;
var digits = [];
while (num > 0) {
digits.push(num % 10);
num = Math.trunc(num / 10);
}
digits.reverse();
console.log(digits);
我可以看到的一个好处是,您不必parseInt()
在每个数字上运行,而是将实际数字作为数值处理。
这是我发现的最短的,尽管它确实将数字作为字符串返回:
let num = 12345;
[...num+''] //["1", "2", "3", "4", "5"]
或者使用它来取回整数:
[...num+''].map(n=>+n) //[1, 2, 3, 4, 5]
我将提供已经给出的答案的变体,以便您可以看到一种始终保留数字类型的不同方法:
var number = 12354987,
output = [];
while (number) {
output.push(number % 10);
number = Math.floor(number/10);
}
console.log(output.reverse().join(',')); // 1,2,3,5,4,9,8,7
在将数字转换为罗马数字时,我使用了上述技术,效果很好,这是我开始学习我不熟悉的编程语言的最喜欢的方法之一。例如,这里是我在世纪之交之后设计一种使用 Tcl 将数字转换为罗马数字的方法:http : //code.activestate.com/recipes/68379-conversion-to-roman-numerals/
我的 Tcl 脚本中的可比行是:
while {$arabic} {
set digit [expr {$arabic%10}]
set arabic [expr {$arabic/10}]