我最近在班上参加了一次考试.其中一个问题是:
给定一个数字n,用C/C++编写一个函数,返回数字squared的数字之和.(以下内容很重要).百分之range是[-(10^7),10^7].示例:如果n=123,函数应该返回14(1^2+2^2+3^2=14).
这是我写的函数:
int sum_of_digits_squared(int n)
{
int s = 0, c;
while (n) {
c = n % 10;
s += (c * c);
n /= 10;
}
return s;
}
在我看来是正确的.所以现在考试回来了,我发现老师没有给我所有的分数,原因我不明白.根据他的说法,为了使我的功能完整,我应该添加以下细节:
int sum_of_digits_squared(int n)
{
int s = 0, c;
if (n == 0) { //
return 0; //
} //
// THIS APPARENTLY SHOULD'VE
if (n < 0) { // BEEN IN THE FUNCTION FOR IT
n = n * (-1); // TO BE CORRECT
} //
while (n) {
c = n % 10;
s += (c * c);
n /= 10;
}
return s;
}
其理由是数字n在[-(10^7),10^7]范围内,因此它可以是负数.但我看不出我自己版本的函数在哪里失败.如果我理解正确,while(n)
的含义是while(n != 0)
notwhile (n > 0)
,因此在我的函数版本中,数字n不会不进入循环.它也会起同样的作用.
然后,我在家里的电脑上try 了这两个版本的函数,我try 的所有例子都得到了完全相同的答案.因此,sum_of_digits_squared(-123)
等于sum_of_digits_squared(123)
(同样,等于14
)(即使没有我显然应该添加的细节).事实上,如果我try 在屏幕上打印数字的数字(从最小到最大),在123
种情况下,我得到3 2 1
,在-123
种情况下,我得到-3 -2 -1
(这实际上有点有趣).但在这个问题中,这并不重要,因为我们将数字平方.
那么,谁错了?
EDIT:我的错,我忘了具体说明,不知道它很重要.在我们的课堂和测试中使用的C版本必须是C99或newer.所以我猜(通过阅读 comments )我的版本无论如何都会得到正确的答案.