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
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;
}
Răspunsuri la întrebare
Răspuns de
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
dar codul meu e aproape leit cu al tau ... am dat long long la toate... :)))
Alte întrebări interesante
Geografie,
8 ani în urmă
Matematică,
8 ani în urmă
Matematică,
8 ani în urmă
Matematică,
9 ani în urmă
Matematică,
9 ani în urmă
Matematică,
9 ani în urmă