用一个while循环,加,减,除和多次计算交叉和(516 = 5 + 1 + 6 = 12)的算法是什么?我会使用modolus,但我不知道如何使用我提到的基本数学术语来复制它。
答案 0 :(得分:1)
让我们假设通过分裂,你的意思是浮动分裂;否则你可以使用floor-division编写自己的mod操作。
这是一个O(n)
时间,O(1)
空间算法,使用循环和比较来枚举数字并对它们求和(其中n
是数字位数)。
JavaScript代码:
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));
&#13;
答案 1 :(得分:-1)
该公式不需要循环,而是从Digital Sum
上的维基百科页面中解除这当然使用exponents和modulo,它不是你列出的操作数之一,但是这种限制是任何现代编程语言都不会存在的东西,这让我相信它不是一个真正的限制,或者这是一个家庭作业问题。无论如何,StackOverflow在这里作为未来程序员找到解决问题的方法的参考,我相信这是解决数字和问题的所有意图和目的所以我在这里列出它为未来的读者。您不必接受这个答案,因为它不是一个真正的答案,而是更多的参考。