Vaa rog am nevoie de ajutor, nu mi dau seama cum ar trebui facuta pentru a lua 100 de puncte!
Problema SumDivOgl de pe pbinfo:
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

Exemplu
Intrare

3
12 23 30
Ieșire

99
Explicație
Oglinditul lui 12 este 21; suma divizorilor săi este 32. Oglinditul lui 23 este 32; suma divizorilor săi este 63. Oglinditul lui 30 este 3; suma divizorilor săi este 4.

Răspuns :

Răspuns:

#include <iostream>

using namespace std;

int main() // complexitate in O[N*sqrt(valmax)]

{

int n, i, j, ogl = 0, nr, k;

long long int S = 0;

cin >> nr;

for (k = 1; k <= nr; k++)

{

 cin >> n; //citire numere

 ogl = 0; // reinitializare nr oglindit

 while (n != 0)   //oglindire

 {

  ogl = ogl * 10 + n % 10;

  n /= 10;

 }

 for (i = 1; i * i <= ogl; i++) //divizori

 {

  if (ogl % i == 0)

  {

   S += i;

   j = ogl / i;

   if (j != i)

    S += j;

  }

 }

}

cout << S; //afisare suma

}

Explicație:

Nu stiu daca e ceva de explicat.

Daca ai nelamuriri le rezolvam dupa.

P.S.

Asa-i ca luai 80 de puncte pentru ca n-ai pus long long int la suma? xD