このページについて

このページは、paiza ラーニング内に開設されているコンテンツ「レベルアップ問題集」で取り扱われているプログラミング課題について、独自の見解を述べたものです。

見解については、paizaラーニングの規約に基づき、許可されている範囲でのみ公開していますが、その内容については paiza とは一切関係なく、また paiza の立場を反映したものではありませんのでご注意ください。

挑戦する課題

レベルアップ問題集その他セットから「総和の計算 (paizaランク C 相当)」を取り上げます。

以下は、問題公開 Web ページからの引用です。

問題

2つの整数 A , B が与えられるので、 A, A + 1, …. B - 1, B の総和を求めてください。

入力される値

  •  2 つの整数 A , B が 1 行で入力されます。

期待する出力

A, A + 1, …. B - 1, B の総和を 1 行で出力してください。

条件

すべてのテストケースにおいて、以下の条件をみたします。

  •  0 ≦ AB < 10 ^ 11

考え方

基本的には、総和を計算する以下の公式を応用すれば良い。

この公式は、 1 から任意の整数 n までの総和を出す公式である。

ただし、与えられている問題は、 A から B までの総和を出す公式であるため、上記の公式はそのまま適用できない。したがって、

  • 1 から B までの総和を求め
  • その総和から 1 から A までの総和を引く

という作業を行えば良い。

注意しなければいけないのは、 Int 型で計算すると桁あふれを起こす可能性がある、ということである。
したがって、ここでは有効桁数が 38桁あり、また10進数を2進数の内部表現ではなく、10進数として扱うことで計算誤差を排除した Decimal 型を使って計算を行なっている。

解答例