#P502. 【入门题】【输入篇③】A+B+C+... Problem (单行输入版)
-
ID: 151
Type: Default
1000ms
256MiB
Tried: 69
Accepted: 28
Difficulty: 1
Uploaded By:
TaZi
Tags>入门教程
【入门题】【输入篇③】A+B+C+... Problem (单行输入版)
题目描述:
给定一行由若干个整数组成的数字序列,求这些整数的和。
输入:
输入只有一行,包含若干个整数,整数之间以空格分隔。
输出:
输出一个整数,表示这一行中所有整数的和。
输入样例:
1 2 3 4 5
输出样例:
15
数据范围:
-
每个整数的范围为 −109≤x≤109
-
最多包含 1000 个整数
题解:处理单行不定组输入
这道题的核心在于处理不定组输入,即在一行内输入多个整数,整数之间以空格分隔。我们需要根据输入的内容灵活地解析并处理。这种问题在大厂笔试中经常出现,下面塔子哥会讲解如何在几种常见编程语言中处理这类问题。
问题解析
- 输入特点:题目中的输入的某一部分是一行由空格分隔的整数。输入的整数数量是不定的,可以有任意个整数。因此,需要编写代码来灵活读取并解析这类输入。
- 输出:我们需要对输入的整数进行求和,并将结果输出。
各语言实现
1.C++ 实现
在 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)
:- 这是一个常见的 C++ 输入模式。
cin
会从标准输入中读取整数,并存入变量num
中。只要读取成功,循环就会继续进行。 - 当输入结束(例如按
Ctrl+D
在 Linux/Mac 或Ctrl+Z
在 Windows)或者遇到非法输入时,cin
会返回false
,循环终止。
- 这是一个常见的 C++ 输入模式。
-
累加和:
- 每次成功读取一个整数后,将其累加到
sum
中,直到无法再读取时输出结果。注意,我们使用long long
类型的变量sum
来避免当输入的整数非常大时的int
溢出
- 每次成功读取一个整数后,将其累加到
2. Java 实现
在 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溢出
- 每次通过
3. Python 实现
numbers = map(int, input().split()) # 将输入按空格分割,并转为整数
print(sum(numbers)) # 输出和
Python 解题思路:
input().split()
:input()
读取一行输入,split()
按空格分割字符串,返回一个字符串列表。map(int, ...)
:通过map(int, ...)
将分割后的字符串列表转换为整数列表。sum()
:Python 中内置的sum()
函数可以直接对列表中的整数求和。Python 的int
类型支持自动扩展,不用担心整数溢出。
4. Go 实现
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) // 输出和
}
Go 解题思路:
fmt.Scanln()
:用于读取一行输入。strings.Split()
:通过strings.Split()
按空格分割字符串,得到一个字符串数组。strconv.Atoi()
:将字符串转换为整数并求和。需要处理可能的转换错误,但这里可以忽略错误。
不定组输入是大厂笔试算法题中的常见模式,通过学习如何处理这些问题,可以提高在笔试中处理灵活输入的能力。
通知
扫码备注华为交流群~期待您的到来
- 湘ICP备2023007293号
- Worker 0, 33ms
- Powered by Hydro v4.14.1 Community