Grade 10 · Subprograms (functions)Citește în română

Function for the sum of digits

Original: Funcție pentru suma cifrelor

O(n²)C++1755 lines2 examples

The idea

The function sumaCifre(x) receives the number by value (it works on a copy, so the x in main is not destroyed) and returns the sum of its digits. In main we read n numbers and keep the one with the largest digit sum; on ties the first one found stays (we compare with strict >).

Original description (Romanian)

Funcția sumaCifre(x) primește numărul prin valoare (lucrează pe o copie, deci x-ul din main nu se strică) și întoarce suma cifrelor. În main citim n numere și păstrăm numărul cu suma cifrelor cea mai mare; la egalitate rămâne primul găsit (comparăm cu > strict).

Complexity
O(n * k), where k is the number of digits of a number
Grade
Grade 10 (Clasa a X-a)

Examples

Example 1

Input

4
123 99 405 18

Expected output

99
Example 2

Input

3
0 7 70

Expected output

7

The code

Comments are in Romanian, as in the original collection. Edit freely: you can reset at any time.

functie-suma-cifrelor.cpp
/*
 * Titlu: Funcție pentru suma cifrelor
 * Clasa: 10
 * Capitol: Subprograme (funcții)
 * Descriere: Funcția sumaCifre(x) primește numărul prin valoare (lucrează pe o
 *            copie, deci x-ul din main nu se strică) și întoarce suma cifrelor.
 *            În main citim n numere și păstrăm numărul cu suma cifrelor cea mai
 *            mare; la egalitate rămâne primul găsit (comparăm cu > strict).
 * Complexitate: O(n * k), unde k este numărul de cifre al unui număr
 *
 * Exemplu
 * Intrare:
 * 4
 * 123 99 405 18
 * Ieșire: 99
 *
 * Exemplu
 * Intrare:
 * 3
 * 0 7 70
 * Ieșire: 7
 */
#include <iostream>
using namespace std;

int sumaCifre(int x)
{
    int s = 0;
    while (x > 0)
    {
        s = s + x % 10;
        x = x / 10;
    }
    return s;
}

int main()
{
    int n, x;
    cin >> n;
    int celMaiBun = -1, sumaMaxima = -1;
    for (int i = 0; i < n; i++)
    {
        cin >> x;
        int s = sumaCifre(x);
        if (s > sumaMaxima)
        {
            sumaMaxima = s;
            celMaiBun = x;
        }
    }
    cout << celMaiBun << '\n';
    return 0;
}

Runs on a real g++ (C++17, -O2) through Compiler Explorer. Keep runs short; there's a time limit.