luogu-B4065 [GESP202412 二级] 数位和

luogu-B4065 [GESP202412 二级] 数位和

GESP二级真题,多层循环和分支练习,难度★✮☆☆☆。

luogu-B4065 [GESP202412 二级] 数位和

题目要求

题目描述

小杨有 nn 个正整数,小杨想知道这些正整数的数位和中最大值是多少。“数位和”指的是一个数字中所有数位的和。例如:对于数字 1234512345,它的各个数位分别是 1,2,3,4,51,2,3,4,5。将这些数位相加,得到

1+2+3+4+5=151+2+3+4+5=15

因此,1234512345 的数位和是 1515

输入格式

第一行包含一个正整数 nn,代表正整数个数。

之后 nn 行,每行包含一个正整数。

输出格式

输出这些正整数的数位和的最值。

输入 #1

3
16
81
10

输出 #1

9

说明/提示

对于全部数据,保证有 1n1051\leq n\leq 10^5,每个正整数不超过 101210^{12}


题目分析

解题思路

  1. 首先,读取测试数据的数量 nn,以了解需要处理的正整数数量。
  2. 接着,对于每个正整数,通过循环取出其每一位数(从个位到最高位),并将这些位数相加,计算出该数的数位和。
  3. 在计算每个数的数位和时,需要与当前的最大数位和进行比较。如果当前数的数位和大于最大数位和,则更新最大数位和,确保最大数位和始终保持着最大的数位和。
  4. 最后,输出最大数位和,即所有正整数中数位和最大的那个数的数位和。

{% include custom/custom-post-content-inner.html %}


示例代码

#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;
}

{% include custom/custom-post-content-footer.md %}

所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code

luogu-”系列题目可在 洛谷题库 在线评测。

bcqm-”系列题目可在 编程启蒙题库 在线评测。

GESP/CSP 认证学习微信公众号
GESP/CSP 认证学习微信公众号
Last updated on