重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

#include<iostream>
using namespace std;

double sum(double n)
{
return (1/2)*n*(1+n);
}

int main()
{
double n;
cin>>n;

cout<<"1から最後までの和は"<<sum(n)<<endl;
}

ソースコードは以上ですが,for文使わずに1から公差が1である数列のn番目までの和を求めたいです。
 以上のソースでコンパイルはできますが,実行してみると,和はすべて0になります,
double型にしているので, 整数の問題ではないと思いますけど,どうなんでしょうか?

よろしくお願いします。

A 回答 (2件)

return (1/2) * n * (1 + n)



だと

1/2 = 0

というのが先に評価されてしまうので、

0 * n * (1 + n) = 0

となってしまいます。

・n * (1 + n) / 2
・(1.0/2.0) * n * (1 + n)
・0.5 * n * (1 + n)

などのように修正すると正しく計算できるようになります。
    • good
    • 0
この回答へのお礼

なるほど,1.0/2.0にすべきでした><
ありがとうございます

お礼日時:2012/12/02 17:12

>double型にしているので, 整数の問題ではないと思いますけど,どうなんでしょうか?



「1/2」は整数演算ではないですか?
    • good
    • 0
この回答へのお礼

1.0/2.0にすべきでした,ありがとうございました

お礼日時:2012/12/02 17:12

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!