Informatică, întrebare adresată de MădălinaSpiridon, 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.

AM DOAR 80 DE PUNCTE
#include
#include
using namespace std;
int n,d,NR,s,S1;
float ma,S;
int main()
{

cin>>n;

for(d=1; d<=n; d++)
{
if(n%d==0){
s=s+d;
NR++;}
}
ma=(float) s/NR;
if(ma==(int)ma)
cout< else
{
ma=ma*100;
S1=(int)ma;
S=( float) S1/100;
cout < }

return 0;
}

Răspunsuri la întrebare

Răspuns de Razzvy
38
Problema este la afisarea cu 2 zecimale:
Ai 3 cazuri:
! - Media este numar intreg, asa ca trebuie sa afisezi un ".00" dupa ea.
II - Media are doar o cifra dupa virgula, asa ca mai trebuie sa afisezi un 0 dupa ea.
III - Media are doua sau mai multe cifre dupa virgula: aplici algoritmul
Tu ai omis cazul II:
#include <iostream>
#include <cmath>
using namespace std;
int n,d,NR,s,S1;
float ma,S;
int main(){
     cin>>n;
     for(d=1; d<=n; d++){  
          if(n%d==0){       
               s=s+d;      
               NR++;   
          }
      }
      ma=(float) s/NR;
      if(ma==(int)ma)    cout<<ma<<".00";
      else if(ma * 10 == int(ma * 10))    cout<<ma<<'0';
      else{   
          ma=ma*100;   
          S1=(int)ma;   
          S=( float) S1/100;   
          cout <<S;
      }
      return 0;
}
Alte întrebări interesante