【发布时间】:2012-11-20 00:25:03
【问题描述】:
几天前我有一个工作面试,他们问我如何使用 c 语言计算从 1 到 10000 的所有 2 或 5 的倍数的总和。我这样做了:
int mult2_5()
{
int i, sum=0;
for(i = 1; i <= 10000; i++)
if(i % 2 == 0 || i % 5 == 0)
sum += i;
return sum;
}
我想知道它是否比这个更快的实现?
【问题讨论】:
-
运行需要多长时间?您的性能要求是什么?
-
2 + 4 + ... + 10000 == 2 * ( 1 + 2 + ... + 5000 ) == 2 * 5001 * 2500,所以迭代计算是浪费时间.余数是 5 + 15 + ... + 9995 == 5 * ( 1 + 3 + ... + 1999 ) == 5 * ( 2000 * 1000 ) / 2 ... 那你为什么要迭代呢?
-
我希望在您的采访中您返回 sum 并将其初始化为零。
-
在条目中我把算法做对了,只是把错误复制到这里。我做这个算法是因为我数学很烂-.-
标签: c performance algorithm