2017-04-03 13 views
-1

1から100万のCで合計を見つける方法は?私は符号なしlong longデータ型(以下の私のコード)を使ってみましたが、それは500,000,000,000を出力します。正しい値は500,000,500,000です。1から100万のCで合計を見つける方法は?

unsigned long long sum = 0; 
for(int i=0;i<1000000;i++) 
    sum += (unsigned long long)i; 
printf("%llu",sum); 
+6

私はすべての反復を唱えるのはなぜ?どうして私は、ゲット・ゴーから期待されるタイプにしないの?そして、1000000を含める場合は、終了条件に '<='を使用することをお奨めします。 – Carcigenicate

+5

https://en.wikipedia.org/wiki/Arithmetic_progression閉じられた式を使用するので、何度も繰り返し処理する必要はありません。この場合、(1 + 1000000)* 1000000/2 –

+1

for(unsigned long long i = 1; i <1000001; i ++)の場合、正しい結果が得られます。あなたがやっていることは、私が信じる0〜999,999の合計を加えることです。 –

答えて

4

これで正しい答えが得られます。あなたの例では、0〜999,999の合計が見つかりました。私もあなたのために不必要な鋳造を削除しました。

unsigned long long sum = 0; 

for (unsigned long long i = 1; i <= 1000000; i++) sum += i; 

printf("%llu", sum); 
+2

コーディング契約は「1〜100万」でした。マジックナンバー「1000001」を構成するコードでこれらの定数を使用する方が良いでしょう。 – chux

1

0から999999までのすべての数字を合計します。結果はいくつかの奇妙なものです。これにより

あなたは正しいものを取得する必要があります

unsigned long long sum=0; 
for(unsigned long long i=1;i<=1000000;i++){ 
    sum+=i; 
} 
+0

は 'i <1000001 'でなければなりません。 –

+2

i <= 1000000は正常に動作します。 –

+1

@yellowantphilあなたは正しいです、脳はスリップします。 –

関連する問題