Numero Smith

Diseñar un algoritmo que al ingresar un número, devuelva una "cadena" que indique si el número es Smith o no.
Un número es Smith si la suma de sus dígitos es igual a la suma de los dígitos de cada número de la descomposición canónica.




Ejem:

* 22     D.C.: 2 x 11
  2 + 2 = 2 + 1 + 1=4

* 378    D.C. : 2 × 3 × 3 × 3 × 7
   3 + 7 + 8 = 2 + 3 + 3 + 3 + 7=18

SOLUCIÓN:


#include<iostream> 
#include<cmath>
using namespace std;
bool primo(int x){
 int divisor=2;
 int raiz=sqrt(x);
 if(x>=2){
  while(divisor<=raiz){
   if(x%divisor==0){
    return false;
   }
   divisor++;
  }
  return true;
  
 }
 else
  return false;
 
}
//devuelve true si y es un factor primo de x en caso contrario devuelve false
int factorPrimo(int x,int y){
 
 if(primo(y)==true && x%y==0)
  return true;
 else
  return false;
}
int sumaDigitos(int x){
 int acum=0;
 while(x>0){//  x/10 es cero cuando x es menor de 10
  acum+=x%10;
  x/=10;
 }
 return acum;
}


int sumaDigitosFactoresPrimos(int x){
 int cont =2;
 int acum=0;
 while(x>1){
  if(factorPrimo(x,cont)){
   acum+=sumaDigitos(cont);
   x/=cont;
   cont=2;
  }
  else
             cont++;
   
 }
 return acum;
}
int main (int argc, char *argv[]) {
 
 int numero;
 int sd;//suma de digitos del numero
 int sumDigitosFP;//suma de digitos de los facores primos 
 cout<<"ingrese un numero:";
 cin>>numero;
 sd=sumaDigitos(numero);
 sumDigitosFP=sumaDigitosFactoresPrimos(numero);
 
 if(sd==sumDigitosFP)
  if(sd!=0)
   cout<<"el numero ingresado es Smith "<<endl;
  else
   cout<<"el numero ingresado no es Smith"<<endl;
 else
  cout<<"el numero ingresado no es Smith"<<endl;
 return 0;
}

Compartir

0 Comment to "Numero Smith"

Publicar un comentario