AntonioVillanueva

Constante de Kaprekar en c++

Aug 30th, 2019
286
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.27 KB | None | 0 0
  1. /*
  2.  * Antonio Villanueva Segura
  3.  * Haga un algoritmo donde se discrimine la cantidad de cifras 3 รณ 4,
  4.  * para luego calcular la constantes Kaprekar 495 y 6174, respectivamente.
  5.  * g++ -std=c++11 -o kaprekar kaprekar.cpp
  6.  * http://www.cplusplus.com/reference/algorithm/sort/
  7.  */
  8. #include <iostream>
  9. #include <string>
  10. #include <algorithm>    // std::sort
  11. #include <vector>
  12. using namespace std;
  13. //---------------------------------------------------------------------
  14. vector <int > ordena(vector<int> v,bool sentido=true){
  15.     //Ordena un vector de foma ascendente (true) o descendente (false)
  16.     if (sentido){sort(v.begin(), v.end()); }
  17.     else{sort(v.rbegin(), v.rend());}  
  18.     return v;
  19. }
  20. //---------------------------------------------------------------------
  21. int creaNumero(vector <int> v){
  22.     //Crea un numero desde un vector
  23.     int posicion=1;
  24.     int cifra=0;
  25.  
  26.     for (auto elem:v){
  27.         cifra+=elem*posicion;
  28.         posicion*=10;
  29.     }
  30.     return cifra;
  31. }
  32. //----------------------------------------------------------------------
  33. int extrae(int n){
  34.     //Extractor cifras unidades ,decenas,centenas ....
  35.     return n%10;  
  36. }
  37. //----------------------------------------------------------------------
  38. vector <int > creaVector(int numero){
  39.     //Creo un vector descomponiendo el numero en unidades
  40.     vector <int> m;
  41.     while (numero){
  42.         m.push_back(extrae(numero));//Guarda cifra
  43.         numero/=10;//Elimina la ultima
  44.   }
  45.   return m;
  46. }
  47. //----------------------------------------------------------------------
  48. void kaprekar(int numero){
  49.     int ultimo=numero;//Ultimo numero para observar repetuc
  50.     vector <int > m;//Vector temporal para efectuar operaciones
  51.  
  52.     do {
  53.         m=creaVector(numero);//Desompone la cifra en unidades en un vector,    
  54.        
  55.         ultimo=numero; 
  56.         numero = abs (creaNumero(ordena(m))- creaNumero(ordena(m,false))); //resta
  57.         cout <<numero<<endl;//resultado de la resta
  58.     }while (ultimo!=numero);
  59.  
  60. }
  61. //----------------------------------------------------------------------
  62. //----------------------------------------------------------------------
  63. //----------------------------------------------------------------------
  64. int main (){
  65.     int numeros[]={1234,2005,574,2134,1859};//Numeros a analizar
  66.  
  67.     for (auto numero:numeros){
  68.         cout<<"Analiza :"<<numero<<endl;
  69.         kaprekar(numero);
  70.     }
  71.     return 0;  
  72. }
Add Comment
Please, Sign In to add comment