終わりまで足す
一行に一つずつ整数が与えられるが、何行あるかは知らされない。
入力が終わるまですべての数を読んで合計を出力せよ。
入力は少なくとも一行あり、空行はない。
最後の行の末尾には改行があることもないこともある。
- 入力
- 行数 1〜100,000、-10,000 ≤ 各数 ≤ 10,000
- 出力
- 合計を一行
3 -1 10
12
5
5
一行に一つずつ整数が与えられるが、何行あるかは知らされない。
入力が終わるまですべての数を読んで合計を出力せよ。
入力は少なくとも一行あり、空行はない。
最後の行の末尾には改行があることもないこともある。
3 -1 10
12
5
5
実行すると、これらの行が順に input()・標準入力に渡されます(実行中に入力を求めません)。
$ 準備完了
コードを入力して解くにはパソコンで開いてください。モバイルでは問題と解答を見られます。
「入力が終わった」に気づく方法は言語ごとに違います。
Python for line in sys.stdin:(終われば繰り返しが止まる — input() を呼び続けると EOFError)、Java BufferedReader.readLine() と C# Console.ReadLine() は終わりで null、C while (scanf("%d", &x) == 1)(終わりで EOF を返す)、C++ while (std::cin >> x)、JS・TS は入力全体を一度に読んで分ければ十分です。
Craykon は コンソール.行読み() が終わりで なし を返すので 間 (行 != なし) で回します。
C の古典的な落とし穴は while (!feof(stdin)) です — feof は読み込みが失敗した*後で*やっと真になるので、最後の改行の後で失敗した scanf のあとに残った x をもう一度足してしまいます(一つ目の例が 12 ではなく 22)。
前の問題のように最初の行を個数として読んではいけません。
import sys total = 0for line in sys.stdin: # 입력이 끝나면 반복도 끝난다 total += int(line)print(total)const nums = require("fs").readFileSync(0, "utf8").trim().split(/\s+/).map(Number);console.log(nums.reduce((s, x) => s + x, 0));import { readFileSync } from "node:fs";const nums: number[] = readFileSync(0, "utf8").trim().split(/\s+/).map(Number);console.log(nums.reduce((s, x) => s + x, 0));import java.io.BufferedReader;import java.io.InputStreamReader; public class Main { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int total = 0; String line; // readLine()은 입력이 끝나면 null while ((line = br.readLine()) != null) total += Integer.parseInt(line.trim()); System.out.println(total); }}using System; class Program{ static void Main() { int total = 0; string line; // ReadLine()은 입력이 끝나면 null while ((line = Console.ReadLine()) != null) total += int.Parse(line); Console.WriteLine(total); }}#include <iostream> int main() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); int x, total = 0; while (std::cin >> x) total += x; // 읽기에 실패하면(입력 끝) 거짓 std::cout << total << '\n';}#include <stdio.h> int main(void) { int x, total = 0; /* scanf는 수를 읽은 개수를 돌려준다 — 입력이 끝나면 EOF(-1)라 1이 아니다 */ while (scanf("%d", &x) == 1) total += x; printf("%d\n", total); return 0;}합 = 0;줄 = コンソール.行読み();間 (줄 != なし){ 합 += 줄.数に(); 줄 = コンソール.行読み();}コンソール.書く(합);