给定一行由若干个整数组成的数字序列,求这些整数的和。
输入只有一行,包含若干个整数,整数之间以空格分隔。
输出一个整数,表示这一行中所有整数的和。
1 2 3 4 5
15
每个整数的范围为 −109≤x≤109
最多包含 1000 个整数
这道题的核心在于处理不定组输入,即在一行内输入多个整数,整数之间以空格分隔。我们需要根据输入的内容灵活地解析并处理。这种问题在大厂笔试中经常出现,下面塔子哥会讲解如何在几种常见编程语言中处理这类问题。
在 C++ 中,我们可以直接使用 while (cin >> num) 来处理不定组输入。这种方式非常简洁,且适用于多个数据行的输入,不需要预先知道数据的数量。cin 在读取时会跳过空格和换行符,直到遇到文件结束符(EOF)或者输入流失败时才会停止。
#include <iostream>
using namespace std;
int main() {
    long long num, sum = 0;
    while (cin >> num) {  // 只要能读取到数,就继续累加
        sum += num;
    }
    cout << sum << endl;  // 输出最终的和
    return 0;
}
while (cin >> num):
cin 会从标准输入中读取整数,并存入变量 num 中。只要读取成功,循环就会继续进行。Ctrl+D 在 Linux/Mac 或 Ctrl+Z 在 Windows)或者遇到非法输入时,cin 会返回 false,循环终止。累加和:
sum 中,直到无法再读取时输出结果。注意,我们使用 long long 类型的变量 sum 来避免当输入的整数非常大时的int溢出在 Java 中,我们也可以使用 Scanner 和 while 循环来处理不定组输入。与 C++ 中类似,Scanner 的 hasNext() 方法可以用于判断是否还有输入内容,配合 nextInt() 方法可以逐个读取输入的整数。
import java.util.Scanner;
class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        long sum = 0;  // 用 long 来避免可能的溢出
        while (sc.hasNextInt()) {  // 当还有整数可以读取时
            sum += sc.nextInt();   // 读取下一个整数并累加
        }
        System.out.println(sum);  // 输出最终的和
        sc.close();  // 关闭输入流
    }
}
while (sc.hasNextInt()):
hasNextInt() 方法检查输入流中是否还有下一个整数。如果有,则返回 true,否则返回 false,这可以用来控制循环持续读取整数,直到输入结束。累加和:
sc.nextInt() 读取一个整数并将其累加到 sum 中。注意,我们使用 long 类型的变量 sum 来避免当输入的整数非常大时可能的int溢出numbers = map(int, input().split())  # 将输入按空格分割,并转为整数
print(sum(numbers))  # 输出和
input().split():input() 读取一行输入,split() 按空格分割字符串,返回一个字符串列表。map(int, ...):通过 map(int, ...) 将分割后的字符串列表转换为整数列表。sum():Python 中内置的 sum() 函数可以直接对列表中的整数求和。Python 的 int 类型支持自动扩展,不用担心整数溢出。package main
import (
    "fmt"
    "strconv"
    "strings"
)
func main() {
    var line string
    fmt.Scanln(&line)  // 读取整行输入
    nums := strings.Split(line, " ")  // 按空格分割字符串
    sum := 0
    for _, num := range nums {
        n, _ := strconv.Atoi(num)  // 将字符串转换为整数
        sum += n
    }
    fmt.Println(sum)  // 输出和
}
fmt.Scanln():用于读取一行输入。strings.Split():通过 strings.Split() 按空格分割字符串,得到一个字符串数组。strconv.Atoi():将字符串转换为整数并求和。需要处理可能的转换错误,但这里可以忽略错误。不定组输入是大厂笔试算法题中的常见模式,通过学习如何处理这些问题,可以提高在笔试中处理灵活输入的能力。
本题属于以下题库,请选择所需题库进行购买