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
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;
}
}
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.
Alte întrebări interesante
Matematică,
8 ani în urmă
Limba română,
8 ani în urmă
Matematică,
9 ani în urmă
Limba română,
9 ani în urmă
Matematică,
9 ani în urmă
Limba română,
9 ani în urmă