👤

Problema #3272 SumDivOgl de pe pbinfo - algoritmul meu obtine doar 40pct. Ce as mai putea sa-i fac?
Cerința
Se dau n numere naturale. Determinați suma divizorilor oglinditelor celor n numere.

Date de intrare
Programul citește de la tastatură numărul n, iar apoi n numere naturale, separate prin spații.

Date de ieșire
Programul va afișa pe ecran numărul S, reprezentând suma cerută.

Restricții și precizări
1 ≤ n ≤ 1000
cele n numere citite vor fi mai mici decât 1.000.000.000

Algoritmul meu:
#include
#include
using namespace std;

int main()
{
int n, S=0, d, c, i, a, ogl=0;
cin>>n;
for(i=1; i<=n; i++){
cin>>a;
ogl=0;
while(a!=0){
c=a%10;
ogl=ogl*10+c;
a=a/10;
}
for(d=1 ; d*d if(ogl % d == 0)
S += d + ogl / d;
if(d * d == ogl)
S += d;
}
}
cout< return 0;
}


Răspuns :

Nu prea înțeleg ce încerci să faci în al doilea for, însă iată cum am rezolvat eu problema:

#include <stdio.h>

#include <iostream>

using namespace std;

int main()

{

int n, S=0, d, c, i, a, ogl=0;

cin>>n;

for(i=1; i<=n; i++){

   cin>>a;

   ogl=0;

while(a!=0){

    c=a%10;

    ogl=ogl*10+c;

    a=a/10;}

for(d=1;d<=ogl;d++){

      if (ogl % d == 0) {

           S+=d;

}

}

}

cout<<"Suma="<<S;

return 0;

}