Informatică, întrebare adresată de CRRir, 8 ani în urmă

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.


boiustef: 80p
Ovidiu0144: afli oglinditul apoi folosesti tehnica asta
Ovidiu0144: if(n<2)S=1;
else {S=n+1;
for(int i=2;i*i<=n;i++)
if(n%i==0)S+=i+n/i;
if(i*i==n)S+=i;
}
cosss96: nu există 80p pe codul trimis de mine.
cosss96: vezi să fie long long int pe sumă. au teste mari.

Răspunsuri la întrebare

Răspuns de cosss96
5

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


boiustef: nu el (ea) primea 80, ci eu...
dar codul meu e aproape leit cu al tau ... am dat long long la toate... :)))
boiustef: si nu mai stiu ce asi ma face eficienta..
boiustef: daca binevoiesti sa discutam putin codul meu...
boiustef: sa vezi... am lasat numai pentru s long long, iar celalate int si a dat 100 .. :)))
cosss96: păi normal. Long long doar la s. celelalte sunt musai pe int.
Alte întrebări interesante