如何使用while循环、加、减、乘、除这些基本的数学运算符计算十进制数的各位数字之和(例如:516 = 5 + 1 + 6 = 12)?我想使用模运算,但不知道如何仅使用所提到的基本数学术语来复制它。
function crossSum(num){
// Find the largest power of ten and number of digits, O(n)
var power = 1,
numDigits = 1;
while (power * 10 <= num){
power = power * 10;
numDigits++;
}
// Calculate cross sum, O(constant * n) = O(n)
var sum = 0,
digit;
while (num > 0){
digit = 0;
while ((digit + 1) * power <= num)
digit++;
console.log(digit)
sum = sum + digit;
num = num - power * digit;
power = power / 10;
}
return sum;
}
console.log(crossSum(516));
这个公式不需要循环,是从维基百科关于数字和的页面中提取的。
当然,这里使用了指数和模运算,这不是您列出的操作符之一,但这种限制在任何现代编程语言中都不存在,这让我相信它不是真正的限制或者这是一个家庭作业问题。无论如何,StackOverflow作为未来程序员解决问题的参考,我相信这是数字和问题的解决方案,因此我在这里列出它供未来读者参考。您不必接受这个答案,因为它不是一个真正的答案,而更多是其他人的参考。
a mod b
=a - ((a ÷ b) × b)
。 - Gassadigital-sum
或者也可能是digital-root
,我记不清了。无论如何,如果我没记错,在维基百科上有一个超级简单的带有模数的公式,不需要循环。 - Albert Renshawdiv
或//
而不是/
(在Python 3中是后两者)? - Rory Daulton