Ir ao conteúdo
  • Cadastre-se

programa em c para encontrar 'numeros perfeitos'


amandalee

Posts recomendados

olá galera, gostaria de pedir uma ajudinha nesse programa :

"'Um número inteiro é dito perfeito se o dobro dele é igual à soma de todos os seus divisores. Por

exemplo, como os divisores de 6 são 1, 2, 3 e 6 e 1 + 2 + 3 + 6 = 12, 6 é perfeito. A matemática ainda não

sabe se a quantidade de números perfeitos é ou não finita. Escreva um programa que liste todos os números

perfeitos menores que um inteiro n dado.''

já comecei a desenvolver, mas o programa não imprime nada =/

peço que vocês consigam identificar onde está o erro.desde já agradeço!

// programa que determina tdos os perfeitos até n
#include<stdio.h>
#include<stdlib.h>
main()
{ int soma=0,div,dobro,n,i,controli;
//
printf("entre com o valor para n:");
scanf("%d",&n);
printf("\n\n");

i=0;controli=1;


while(i<n)

{ while(controli<=i)

{
dobro=2*i;
div=i/controli;
if(i%controli==0)
{soma=soma+controli;}
controli++;
}
i++; if(soma==dobro)
printf("%d\t",i);
}printf("\n\n");
system("pause"); }

Link para o comentário
Compartilhar em outros sites

Bom seu codigo teve algumas coisas que eu nao consegui entender e tambem é melhor você organizar mais o codigo.

fiz esse codigo aqui usando o seu ve ae qualquer duvida posta ae.


#include<stdio.h>
#include<stdlib.h>

int main()
{
int soma=0,dobro,n,i;

printf("entre com o valor para n:");
scanf("%d",&n);

printf("\n\n");

dobro=2*n;/*Dobro é igual a 2 vezes o numero digitado,no seu codigo você pois que dobro era 2 vezes o contador i*/
for (i=1;i<=n;i++)// laço repete até chegar no numero digitado
{
if(n % i == 0)// Se o resto da divisao do numero digitado por i for igual a 0
{
soma=soma+i; // soma recebe o numero que feiz a divisao dar resto 0
}
}
if(soma==dobro)//Se soma dos numeros divisiveis for igual ao dobro
printf("%d e um numero perfeito ",n);
else
printf ("%d nao e um numero perfeito",n);

printf("\n\n");
system("pause");
return 0;
}

Link para o comentário
Compartilhar em outros sites

obrigada por responder xD

bem, você fez um programa pra entrar com um valor pra n e dizer se ele é perfeito ou não.o programa que não estou conseguindo fazer pede pra gerar todos os perfeitos até o numero n.segue um outro código que fiz, dessa vez usando o for,mas que novamente não funciona:

#include <stdio.h>
#include <stdlib.h>

main()
{
int soma=0,n,i,div,auxi,dobro;
// i variavel de controle do n, auxi variavel de controle do i
printf("entre com n");
scanf("%d",&n);


for(i=0;i<n;i++)
{
//um laço para percorrer todos os numeros antes de n
dobro=2*i;



for(auxi=1;auxi<=i;auxi++)
{
//e outro laço para percorrer os menores que o i

div=i/auxi;
if(i%auxi==0)
soma=soma+div;

}
if(soma==dobro)
printf("%d",i);



}

system("pause");
}

Link para o comentário
Compartilhar em outros sites

Ah desculpa nao li direito o enunciado isso q da fazer com pressa.

Eu tinha um programa aqui que mostrava os numeros perfeitos até 100, aqui adaptei o primeiro laço para ir até o numero digitado:

#include<stdio.h> 
#include<stdlib.h>


int main ()
{
int soma,i,j,n;

printf ("Digite o numero");
scanf ("%d",&n);

for (i=1;i<n;i++) //laço percorre até o numero digitado
{
soma=0; //zera a soma para cada repetiçao
for (j=1;j<i;j++) {
if (i%j==0)
soma=soma+j;
}
if (soma==i)
printf("\nnumero perfeitos:%d",i);
}
printf ("\n\n");
system ("pause");
return 0;
}

Link para o comentário
Compartilhar em outros sites

Como o amigo falou ali ele nao conta o proprio numero mais mesmo assim nao tem como dar errado, mais se você quiser é so adaptar nesse aqui ele soma o numero.

#include<stdio.h> 
#include<stdlib.h>


int main ()
{
int soma,i,j,n,dobro=0;

printf ("Digite o numero");
scanf ("%d",&n);

dobro=2*n;

for (i=1;i<n;i++) //laço percorre até o numero digitado
{
soma=0; //zera a soma para cada repetiçao
for (j=1;j<i;j++) {
if (i%j==0)
soma=soma+j;
}
soma=soma+i;
if (soma==2*i)
printf("\nnumero perfeitos:%d",i);
}
printf ("\n\n");
system ("pause");
return 0;
}

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!