Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * Antonio Villanueva Segura
- * Haga un algoritmo donde se discrimine la cantidad de cifras 3 ó 4,
- * para luego calcular la constantes Kaprekar 495 y 6174, respectivamente.
- * g++ -std=c++11 -o kaprekar kaprekar.cpp
- * http://www.cplusplus.com/reference/algorithm/sort/
- */
- #include <iostream>
- #include <string>
- #include <algorithm> // std::sort
- #include <vector>
- using namespace std;
- //---------------------------------------------------------------------
- vector <int > ordena(vector<int> v,bool sentido=true){
- //Ordena un vector de foma ascendente (true) o descendente (false)
- if (sentido){sort(v.begin(), v.end()); }
- else{sort(v.rbegin(), v.rend());}
- return v;
- }
- //---------------------------------------------------------------------
- int creaNumero(vector <int> v){
- //Crea un numero desde un vector
- int posicion=1;
- int cifra=0;
- for (auto elem:v){
- cifra+=elem*posicion;
- posicion*=10;
- }
- return cifra;
- }
- //----------------------------------------------------------------------
- int extrae(int n){
- //Extractor cifras unidades ,decenas,centenas ....
- return n%10;
- }
- //----------------------------------------------------------------------
- vector <int > creaVector(int numero){
- //Creo un vector descomponiendo el numero en unidades
- vector <int> m;
- while (numero){
- m.push_back(extrae(numero));//Guarda cifra
- numero/=10;//Elimina la ultima
- }
- return m;
- }
- //----------------------------------------------------------------------
- void kaprekar(int numero){
- int ultimo=numero;//Ultimo numero para observar repetuc
- vector <int > m;//Vector temporal para efectuar operaciones
- do {
- m=creaVector(numero);//Desompone la cifra en unidades en un vector,
- ultimo=numero;
- numero = abs (creaNumero(ordena(m))- creaNumero(ordena(m,false))); //resta
- cout <<numero<<endl;//resultado de la resta
- }while (ultimo!=numero);
- }
- //----------------------------------------------------------------------
- //----------------------------------------------------------------------
- //----------------------------------------------------------------------
- int main (){
- int numeros[]={1234,2005,574,2134,1859};//Numeros a analizar
- for (auto numero:numeros){
- cout<<"Analiza :"<<numero<<endl;
- kaprekar(numero);
- }
- return 0;
- }
Add Comment
Please, Sign In to add comment