# Divisores de um números ## Recommended Posts Como faço pra esse código ler vários números até o usuário digitar -1 e no fim mostrar a soma dos divisores de cada um?

```#include <iostream>
using namespace std;
int main()
{
int valor,i, soma;
soma = 0,
i = 1;

cin>>valor;

while(i < valor and valor !=-1)
{
if (valor%i==0)
{
soma += i;
}
i++;

}
cout<<soma<<endl;

return 0;
}```

##### Share on other sites Boas, @amelia!

Primeiramente uma sugestão.
O ciclo WHILE que tu tens para somar cada um dos divisores encontrados é facilmente transformado num Ciclo FOR:

```for (size_t i = 1; i < valor; i++)
if (valor % i == 0)
soma += i;```

Segundo, a solução a que cheguei seria algo do genero:

```#include <iostream>
#include <vector>
using namespace std;

int main()
{
int valor, soma;

// declaração de um vetor de ints
std::vector<int> arr;

do {
cin >> valor;

if (valor != -1) {
// reset a soma
soma = 0;

// Somar Divisores do valor
for (size_t i = 1; i < valor; i++)
if (valor % i == 0)
soma += i;

// Adicionar int soma ao vetor arr
arr.push_back(soma);
}
} while (valor != -1);

// print de cada elemento no vetor arr com " " entre os elementos
for (size_t i = 0; i < arr.size(); i++)
cout << arr[i] << " ";

return 0;
}```

Acredito que existem formas mais eficientes de o fazer.

Edited by AshKetshup
• 1

Mas façam o que fizerem nunca façam:

`sudo apt remove python`

##### Share on other sites 5 horas atrás, AshKetshup disse:

Boas, @amelia!

Primeiramente uma sugestão.
O ciclo WHILE que tu tens para somar cada um dos divisores encontrados é facilmente transformado num Ciclo FOR:

```
for (size_t i = 1; i < valor; i++)
if (valor % i == 0)
soma += i;```

Segundo, a solução a que cheguei seria algo do genero:

```
#include <iostream>
#include <vector>
using namespace std;

int main()
{
int valor, soma;

// declaração de um vetor de ints
std::vector<int> arr;

do {
cin >> valor;

if (valor != -1) {
// reset a soma
soma = 0;

// Somar Divisores do valor
for (size_t i = 1; i < valor; i++)
if (valor % i == 0)
soma += i;

// Adicionar int soma ao vetor arr
arr.push_back(soma);
}
} while (valor != -1);

// print de cada elemento no vetor arr com " " entre os elementos
for (size_t i = 0; i < arr.size(); i++)
cout << arr[i] << " ";

return 0;
}```

Acredito que existem formas mais eficientes de o fazer.

## Create an account

Register a new account

×

• #### Revista PROGRAMAR

• Wiki
• IRC
×
• Create New...