【发布时间】:2015-07-08 06:58:04
【问题描述】:
我的目标是找到从 4 到 666554 的所有数字的总和,其中仅包含 4,5,6。
SUM = 4+5+6+44+45+46+54+55+56+64+65+66+.....................+666554.
简单的方法是运行一个循环并将仅由 4,5 和 6 组成的数字相加。
long long sum = 0;
for(int i=4;i <=666554;i++){
/*check if number contains only 4,5 and 6.
if condition is true then add the number to the sum*/
}
但它似乎效率低下。检查数字是否由 4,5 和 6 组成需要时间。有什么办法可以提高效率。我尝试了很多,但没有找到新方法。请帮助。
【问题讨论】:
-
在网络上稍微搜索一下就很容易找到:en.wikipedia.org/wiki/Arithmetic_progression#Sum 了解详情。是的,甚至 SO 已经覆盖了this question。下次再做一点研究。
-
@Evert:我很确定你链接的问题不一样。
-
@Julo0sS:正则表达式效率不高。
-
@Dair,哈哈哈!我的错,我主要是按标题来的。
-
你说得对,这个不用构造数字就可以计算出来。 提示:设 g(n) 是所有 456 个数字的总和,恰好是 n 位数字。写下 g 的递归关系。