【发布时间】:2021-04-08 09:25:36
【问题描述】:
编写一个函数 getNumberOfSquares(int n) (C) / get_number_of_squares,它将返回有多少整数(从 1、2... 开始)提升到 2 的幂,然后相加后小于给定的某个数字参数。
例如 1:对于 n = 6,结果应该是 2,因为 1^2 + 2^2 = 1 + 4 = 5 和 5
对于上面的函数,我编写了一个程序,但是测试程序给出了一个错误,即当输入为 getNumberOfSquares(100000) 时,函数应该返回 66,但我的返回 403。
这是我的解决方案:
int getNumberOfSquares(int n){
int sum=0;
int limit=0;
for (int i = 1; i < n && n>sum; ++i)
{
sum += i*i;
++limit;
if(sum>=n){
sum -= i*i;
--limit;
}
}
return limit;
}
【问题讨论】:
-
尝试找出导致错误结果的最小可能输入。然后使用常见的调试技术(例如使用实际的调试器来单步调试代码)来尝试找出发生了什么。