{ }codelper
64ビット整数オーバーフロー合計P0015

大きな合計

一行目に整数の個数 n、二行目に整数 n 個が空白区切りで与えられる。
n 個の合計を出力せよ。

入力
1 ≤ n ≤ 10,000、-1,000,000,000 ≤ 各数 ≤ 1,000,000,000(一つ一つの数は 32 ビット int に収まる)
出力
合計を一行(-10^13 以上 10^13 以下)
例 1 · stdin
3
1000000000 1000000000 1000000000
stdout
3000000000
例 2 · stdin
4
5 -2 7 -10
stdout
0
main.py
入力(stdin)

実行すると、これらの行が順に input()・標準入力に渡されます(実行中に入力を求めません)。

$ 準備完了

コードを入力して解くにはパソコンで開いてください。モバイルでは問題と解答を見られます。

ほかの言語では?言語別の解答を見る · 8 言語の解答

数一つは int(32 ビット、約 ±21 億)に収まりますが、合計は収まりません。
なので数は int で読んでよくても、合計をためる変数は 64 ビットが必要です:C・C++ long long(C の long は Windows では 32 ビット)、Java・C# long。
int のままだとエラーなしでおかしな数が出ます — Java・C# は既定であふれを知らせずに回り込み(C# は checked で囲むと例外)、C・C++ では符号付き整数のあふれは未定義動作です。
Python の整数には大きさの制限がなく、JS・TS・Craykon は数の型が一つ(倍精度)で 2^53(約 9×10^15)まで正確なので、最大 10^13 のこの問題はそのまま動きます。

Pythonmain.py · 2 行
n = int(input())print(sum(map(int, input().split())))
JavaScriptmain.js · 3 行
const [n, ...a] = require("fs").readFileSync(0, "utf8").trim().split(/\s+/).map(Number);// 합은 최대 10^14 — 2^53(약 9×10^15)보다 작아서 Number로 정확하다console.log(a.reduce((s, x) => s + x, 0));
TypeScriptmain.ts · 3 行
import { readFileSync } from "node:fs";const [n, ...a]: number[] = readFileSync(0, "utf8").trim().split(/\s+/).map(Number);console.log(a.reduce((s, x) => s + x, 0));
JavaMain.java · 14 行
import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.StringTokenizer; public class Main {    public static void main(String[] args) throws Exception {        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));        int n = Integer.parseInt(br.readLine().trim());        StringTokenizer st = new StringTokenizer(br.readLine());        long total = 0; // 수 하나는 int에 들어가도 합은 long이 필요하다        for (int i = 0; i < n; i++) total += Integer.parseInt(st.nextToken());        System.out.println(total);    }}
C#Main.cs · 13 行
using System; class Program{    static void Main()    {        Console.ReadLine();        long total = 0; // int로 두면 조용히 넘친다(C#은 기본이 unchecked)        foreach (string s in Console.ReadLine().Split(' ', StringSplitOptions.RemoveEmptyEntries))            total += int.Parse(s);        Console.WriteLine(total);    }}
C++main.cpp · 14 行
#include <iostream> int main() {    std::ios::sync_with_stdio(false);    std::cin.tie(nullptr);    int n, x;    long long total = 0;    std::cin >> n;    for (int i = 0; i < n; i++) {        std::cin >> x;        total += x;    }    std::cout << total << '\n';}
Cmain.c · 13 行
#include <stdio.h> int main(void) {    int n, x;    long long total = 0; /* long은 Windows에서 32비트라 long long을 쓴다 */    scanf("%d", &n);    for (int i = 0; i < n; i++) {        scanf("%d", &x);        total += x;    }    printf("%lld\n", total);    return 0;}
Craykonmain.cray · 8 行
n = コンソール.行読み().数に();수들 = コンソール.数読み();합 = 0;それぞれ (x の中 수들){    합 += x;}コンソール.書く(합);