一尘不染

在给定范围内用特定数字写的所有数字的总和

algorithm

我的目标是找到从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组成需要花费时间。有什么办法可以提高效率。我已经尝试了很多,但没有找到新方法。请帮忙。


阅读 261

收藏
2020-07-28

共1个答案

一尘不染

对于1位数字,请注意

4 + 5 + 6 == 5 * 3

对于2位数字:

(44 + 45 + 46) + (54 + 55 + 56) + (64 + 65 + 66)
== 45 * 3 + 55 * 3 + 65 * 3
== 55 * 9

等等。

在一般情况下,n-digits数字,有3
ň其中包括456只是,他们的平均价值是完全5...5n位)。使用代码,它们的总和是('5' * n).to_i * 3 ** n(Ruby)或int('5' * n) * 3 ** n(Python)。

您计算高达6位数号码,然后减去的总和666555666666


PS:对于像这样的小数666554,使用模式匹配足够快。(示例

2020-07-28