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;
}
0 Comment to "Numero Smith"
Publicar un comentario