以下の解決策はまだX3、X5とX15用のintので、正しい結果を返し、なぜ私が理解した上で問題を抱えていますJavaのプロジェクトオイラー#1 - なぜ結果は正しく切り捨てられますか?
「1000以下の3または5の全ての倍数の和を探します」分割後つまり、除算の結果は常に切り捨てられ、小数は無視されます。
3つのintすべてをdouble型に置き換えようとしたとき、私は間違った結果を得ました。
溶液は、以下の観察に基づいている:
1 + 2 + ... + N = N *(N + 1)/ 2
public static void main(String[] args) {
int nr = 1000;
nr--;
int x3 = nr/3;
int x5 = nr/5;
int x15 = nr/15;
long sum1 = 3*x3*(x3+1);
long sum2 = 5*x5*(x5+1);
long sum3 = 15*x15*(x15+1);
long sum = (sum1+sum2-sum3)/2;
System.out.println(sum)
}
あなたはループに精通していますか? –
@Mohsen_Fatemiこれにはループは必要ありません。 –
@Mohsen_Fatemiは[Carl Friedrich Gaussの先生がクラスをしばらく忙しくしていた時の話](https://nrich.maths.org/2478)に精通していますか? (そして、[inclusion-excluclusionの原理](https://en.wikipedia.org/wiki/Inclusion%E2%80%93exclusion_principle)) –