【GESP】C++二级真题 luogu-B4065 [GESP202412 二级] 数位和
GESP二级真题,多层循环和分支练习,难度★✮☆☆☆。
luogu-B4065 [GESP202412 二级] 数位和
题目要求
题目描述
小杨有 $n$ 个正整数,小杨想知道这些正整数的数位和中最大值是多少。“数位和”指的是一个数字中所有数位的和。例如:对于数字 $12345$,它的各个数位分别是 $1,2,3,4,5$。将这些数位相加,得到
\[1+2+3+4+5=15\]因此,$12345$ 的数位和是 $15$。
输入格式
第一行包含一个正整数 $n$,代表正整数个数。
之后 $n$ 行,每行包含一个正整数。
输出格式
输出这些正整数的数位和的最值。
输入 #1
1
2
3
4
3
16
81
10
输出 #1
1
9
说明/提示
对于全部数据,保证有 $1\leq n\leq 10^5$,每个正整数不超过 $10^{12}$。
题目分析
解题思路
- 首先,读取测试数据的数量 $n$,以了解需要处理的正整数数量。
- 接着,对于每个正整数,通过循环取出其每一位数(从个位到最高位),并将这些位数相加,计算出该数的数位和。
- 在计算每个数的数位和时,需要与当前的最大数位和进行比较。如果当前数的数位和大于最大数位和,则更新最大数位和,确保最大数位和始终保持着最大的数位和。
- 最后,输出最大数位和,即所有正整数中数位和最大的那个数的数位和。
—·
示例代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
using namespace std;
int main() {
int n; // 读取测试数据的数量
cin >> n;
long long a; // 读取正整数 a
long long max = 0; // 初始化最大数位和为0
for (int i = 1; i <= n; i++) {
cin >> a; // 读取每个正整数
int ans = 0; // 初始化当前数的数位和为0
while (a != 0) {
int j = a % 10; // 取出当前数的最后一位
ans += j; // 将最后一位加到数位和中
a /= 10; // 移除当前数的最后一位
}
if (ans > max) {
max = ans; // 如果当前数的数位和大于最大数位和,则更新最大数位和
}
}
cout << max; // 输出最大数位和
return 0;
}
所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code
GESP各级别考纲要点、知识拓展和练习题目清单详见C++学习项目主页
“luogu-”系列题目已加入洛谷Java、C++初学团队,作业清单,可在线评测,团队名额有限,欢迎加入。
“bcqm-”系列题目可在编程启蒙题库进行在线评测。
本文由作者按照 CC BY 4.0 进行授权