2016-11-06 59 views
0

我如何使下列允许负数并将它们视为正数。防爆。 -91 = 10 它目前用于取整数并添加所有数字,但只适用于正数。谢谢!数字总和(INC。负数)

public static int sumOfDigits(int n) { 
    int sum = 0; 
    while (n > 0) { 
     sum += n % 10; 
     n = n/10; 
    } 
    return sum; 
} 
+0

n = Math.abs(n)。这里根本没有递归。为什么标题? –

+0

@JBNizet'n = Math.abs(n)'对于'Integer.MIN_VALUE'失败。 – kgeorgiy

回答

2

简单的解决方案:添加n = Math.abs(n)作为函数的第一行。此解决方案适用于所有号码,但Integer.MIN_VALUE除外。

始终正确的解决方案:将环路条件替换为n != 0,并返回Math.abs(sum)作为结果。

+0

非常感谢,学到了新东西! – Lanie909

0
public static int sumOfDigits(int n) { 
    if (n == 0) return 0; 
    else return (n % 10) + sumOfDigits(n/10); 
} 
+0

可以做一点点评论,因为OP使用非递归方法 – smac89

+0

在本文的第一个版本中,作者要求递归的方式来计算他的函数。因此我添加了递归版本。 – biro

+0

返回0为负数 - 我不认为这就是要求... – assylias