Jump to content

Divisores de um números


amelia

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;
}
Link to comment
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 {
		// Ler valor do teclado
		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.

Espero ter ajudado!

Edited by AshKetshup
  • Vote 1

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

sudo apt remove python

 

Link to comment
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 {
		// Ler valor do teclado
		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.

Espero ter ajudado!

Muito obrigada!

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.