Subiectul al III-lea problema 1 Simulare Bacalaureat Informatica 2025

Un număr „care aduce bucurie” – harsad (sau număr Niven), este un număr întreg divizibil cu suma
cifrelor sale.
Subprogramul harsad are doi parametri:

  • k, prin care primește un număr natural (k[1,106]);
  • n, prin care furnizează cel mai mare număr natural harsad mai mic sau egal cu k.
    Scrieți definiția completă a subprogramului.
    Exemplu: pentru k=2027, după apel, n=2025 (2+0+2+5=9, iar 2025 este divizibil cu 9).
#include <iostream>

using namespace std;

// Functie care calculeaza suma cifrelor unui numar
int sumaCifrelor(int x) {
    int suma = 0;
    while (x > 0) {
        suma += x % 10;  // Adauga ultima cifra
        x /= 10;  // Elimină ultima cifra
    }
    return suma;
}

// Subprogramul 'harsad' care furnizează cel mai mare număr Harsad mai mic sau egal cu k
void harsad(int k, int &n) {
    for (n = k; n >= 1; n--) {  // Parcurgem de la k până la 1
        int suma = sumaCifrelor(n);  // Calculăm suma cifrelor
        if (n % suma == 0) {  // Verificăm dacă numărul este divizibil cu suma cifrelor
            return;  // Dacă găsim un număr Harsad, ieșim din funcție
        }
    }
}

int main() {
    int k, n;
    cin >> k;  // Citim valoarea lui k

    harsad(k, n);  // Apelăm subprogramul 'harsad'

    cout << "Cel mai mare numar Harsad mai mic sau egal cu " << k << " este: " << n << endl;

    return 0;
}