我制作了这段代码来获得fibnacci系列的术语总和:
int main() {
int previous, current = 0, next = 1,
sum = current, threshold;
printf("Enter the threshold: ") ;
scanf("%d", &threshold) ;
printf("Fibonacci series: %d", current) ;
while (sum < threshold)
{
previous = current;
current = next;
next = previous + current;
printf(" + %d", current) ;
sum += current;
if((log10(sum) + 1) >= 7)
break;
}
printf(" = %d\n", sum);
return 0;
}
我需要你从系列的那一端告诉我所有术语的总和大于7位数。我试过这个,我不知道它是否方便:
if((log10(sum) + 1) >= 7)
break;
因为我已经理解 log10()消耗了大量的处理器时间和资源,¿有更有效的方法吗?
答案 0 :(得分:5)
最简单,最自然的方法是测试sum >= 1000000
。
答案 1 :(得分:0)
您的算法是O(n)。您可以通过更改算法来改进代码。
您可以将此总和缓存在cacheData
数组中。 (cacheData[i]
=从1到i的fibnacci系列之和)
计算此数组的所有总和小于10 ^ 7.
然后使用二进制搜索在O(LogN)中找到小于输入阈值的第一个和。