Informatică, întrebare adresată de MadalinaMadutaa, 9 ani în urmă

Cerința
Se citeşte de la tastatură un număr natural n. Să se calculeze şi să se afişeze media aritmetică a tuturor divizorilor săi. Media va fi cu fix 2 zecimale dupa virgula.

Date de intrare
Programul citește de la tastatură numărul n.

Date de ieșire
Programul va afișa pe ecran numărul S, reprezentand media aritmetica.

Restricții și precizări
1 ≤ n ≤ 1.000.000



Exemplu
Intrare

9
Ieșire

4.33
Explicație
Divizorii lui 9 sunt: 1, 3 si 9. Media aritmetica este 4.33.

Răspunsuri la întrebare

Răspuns de artur99
6
#include <iostream>
using namespace std;

int main(){
    long long n,s=0;
    cin>>n;
    int z=2; //Aici numărăm divizorii
    s=n+1; //adunăm din prima divizorii improprii
    //Din acest motiv am setat și z=2, pentru că
    //Începem cu divizorii improprii deja adăugați
    //De asta for-ul îl facem direct de la 2 până la n/2
    //(pentru că între n/2 și n nu mai există divizori)
    for(int i=2;i<=n/2;i++){
        if(n%i==0){
          s=s+i;
          z++;
        }
    }
    //Acum, va trebui să calculăm rezultatul cu 2 zecimale.
    //Prima dată calculăm numărul întreg din stânga:
    int rez = s/z;
    //Αcum avem rezultatul fără virgulă în rez
    //Ne mai trebuie zecimalele:
    //Înmulțim suma cu 100, împărțim la numărul de divizori găsiți
    //Apoi luăm ultimele 2 cifre, care vor fi zecimalele.
    int zec = ((s*100)/z)%100;
    //Acum, să afișăm numărul:
    cout<<rez<<".";
    //Acum trebuie să afișăm zecimalele, doar că aici avem o problemă:
    //dacă este formată dintr-o singură cifră, trebuie să mai adăugăm un 0 în față, deci
    if(zec < 10){
        cout<<0<<zec;
    }else{
        cout<<zec;
    }
}

artur99: E cam lung :)) Sursa dată de ei folosește o altă librărie, și nu cred că ați făcut.
MadalinaMadutaa: Merci mult!
artur99: npc :D
MadalinaMadutaa: ok.
Alte întrebări interesante