大きな合計
一行目に整数の個数 n、二行目に整数 n 個が空白区切りで与えられる。
n 個の合計を出力せよ。
- 入力
- 1 ≤ n ≤ 10,000、-1,000,000,000 ≤ 各数 ≤ 1,000,000,000(一つ一つの数は 32 ビット int に収まる)
- 出力
- 合計を一行(-10^13 以上 10^13 以下)
3 1000000000 1000000000 1000000000
3000000000
4 5 -2 7 -10
0
一行目に整数の個数 n、二行目に整数 n 個が空白区切りで与えられる。
n 個の合計を出力せよ。
3 1000000000 1000000000 1000000000
3000000000
4 5 -2 7 -10
0
実行すると、これらの行が順に input()・標準入力に渡されます(実行中に入力を求めません)。
$ 準備完了
コードを入力して解くにはパソコンで開いてください。モバイルでは問題と解答を見られます。
数一つは 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 のこの問題はそのまま動きます。
n = int(input())print(sum(map(int, input().split())))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));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));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); }}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); }}#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';}#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;}n = コンソール.行読み().数に();수들 = コンソール.数読み();합 = 0;それぞれ (x の中 수들){ 합 += x;}コンソール.書く(합);