Javascript 求和一个数';s数字
下面是我的代码。有人能看出我犯的错误吗? 编写一个名为sumdights的函数,该函数将数字作为输入,并返回每个数字的十进制数字的绝对值之和。例如:Javascript 求和一个数';s数字,javascript,algorithm,Javascript,Algorithm,下面是我的代码。有人能看出我犯的错误吗? 编写一个名为sumdights的函数,该函数将数字作为输入,并返回每个数字的十进制数字的绝对值之和。例如: sumDigits(10); // Returns 1 sumDigits(99); // Returns 18 sumDigits(-32); // Returns 5 Let's assume that all numbers in the input will be integer values. function sumDigits(
sumDigits(10); // Returns 1
sumDigits(99); // Returns 18
sumDigits(-32); // Returns 5
Let's assume that all numbers in the input will be integer values.
function sumDigits(number) {
let numberstring = number.toString()
let numberarr = numberstring.split("")
let counter = 0
for(var i=0; i<numberarr.length; i++) {
if(typeof numberarr[i] === "number") {
console.log(numberarr[i])
let numbervalue = Number(numberarr[i])
console.log(numbervalue)
counter += numbervalue
} else if (typeof numberarr[i] !== "number"){
counter += 0
}
}
return counter
}
sumdights(10);//返回1
数字总和(99);//返回18
总和数字(-32);//返回5
让我们假设输入中的所有数字都是整数值。
功能数字(数字){
让numberstring=number.toString()
设numberrarr=numberstring.split(“”)
设计数器=0
对于(var i=0;i请尝试以下解决方案:
console.log(sumdights(-103));//返回4
功能数字(数字){
var numberstring=number.toString();
var计数器=0;
对于(var i=0;i
if(编号的类型[i]=“编号”)
语句总是false,因为在将数字转换为字符串之前,我认为函数总是返回零
console.log(Math.abs(sumDigits(10))); // Returns 1
console.log(Math.abs(sumDigits(99))); // Returns 1
console.log(Math.abs(sumDigits(-32))); // Returns 1 // Returns 5
//Let's assume that all numbers in the input will be integer values.
function sumDigits(number) {
var counter = 0;
var remainder;
number=Math.abs(number);
while(number>0){
counter=counter+number%10;
number=Math.floor(number/10);
}
return counter;
}
我想你正在寻找这样的代码。我不明白你为什么要把数字转换成字符串
number=Math.abs(number); this line first convert any negative number to positive.
sumDigits(number) takes an argument as now loop through the number until number < 0 then add the remainder to counter variable then return counter as final sum
number=Math.abs(number);此行首先将任何负数转换为正数。
sumDigits(number)接受一个参数,现在循环遍历该数字,直到number<0,然后将余数添加到计数器变量,然后返回计数器作为最终和
如果你想知道为什么你的代码片段不起作用,那么giovybus&Raman的答案是正确的——这是因为编号者[I]的引用总是一个字符串。编号者是一个字符串数组,而不是一个数字数组,你需要在使用之前将其转换为一个数字。对以上代码的调整如下
sumdights(10);//返回1
sumdights(99);//返回18
三位数(-32);
功能数字(数字){
让numberstring=number.toString().replace(“-”,”);
设numberrarr=numberstring.split(“”)
设计数器=0
对于(var i=0;i,使用filter和reduce来计算总数
<代码>功能数字(数字){
返回([…number.toString()]
.filter((char)=>!isNaN(parseInt(char)))
.reduce(函数(a,b){返回a+parseInt(b)},0));
}
常数sum1=sum1位数(103);
console.log(sum1);
常数sum2=sum2位数(-105);
console.log(sum2);
您遇到了什么问题?问题是typeof numberrar[i]==“number”
将始终是false
,因为numberrar
包含string
s。它不会遍历第一个if语句……您可以用它来替换它,这是否回答了您的问题?试试sumdights(-103)