Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- //compilacion g++ -std=c++11 -o reto reto.cpp
- //ejecucion ./ejecutable <input.txt , donde input es el fichero texto con datos entrada
- using namespace std;
- //Resta UNIDADES , de DECENAS si hay "CARRY" resta 1 de CENTENAS
- void resta(char *a, char b){
- *a-='0';//Convesion ASCII ->decimal , trabaja con un puntero
- b-='0';//Converson ASCII->decimal
- if ( b > *a) {
- *a+=10;//b es mayor , sumo 10 en a, tenemos "carry" en centenas !
- resta((a-1),'1');//Llamada reflexiva a esta funcion, afecta centenas
- }
- //Modifico el valor de las decenas directamente , por puntero
- *a= (((*a-'0')-(b-'0')))+'0';
- }
- bool divisible (string numero){
- cout <<numero<<endl;//Print entrada
- if ( (numero.length())> 2){//Mientras sea mayor de 2 digitos
- for (size_t pos=(numero.length()-1);pos >1 ; pos--){
- //Restando el dígito 'unidades' del número truncado decenas,centenas
- resta(&numero[pos-1],numero[pos]);
- numero.pop_back();//Borrando el dígito de las unidades
- cout <<numero<<endl;//Print
- }
- }
- if (numero[0]==numero[1]){return true;} //dos digitos es 11 ?
- return false;
- }
- int main(){
- string entrada;
- while(cin >> entrada) {//lee todas las lineas < input.txt
- cout <<"El número "<< entrada << (divisible(entrada) ? " ":" no ")
- << "es divisible entre 11."<< endl;
- };
- }
- /*
- #Reto: Números divisibles por 11
- Escriba un programa que acepte como entrada una lista de enteros positivos y usando el algoritmo escrito abajo
- verifique si el entero es o no divisible por 11
- Algoritmo:
- Mientras el número que se prueba tenga más de dos dígitos, forme un nuevo número:
- * Borrando el dígito de las unidades.
- * Restando el dígito borrado del número truncado.
- El número original es divisible por 11 si y solo si, el número restante final es divisible por 11.
- Los ceros a la izquierda no son considerados parte del número y no deber ser impresos.
- Entrada:
- La entrada consiste de una serie de números enteros, esta lista termina con 0, cada entero positivo tiene una máximo de 50 dígitos. Se puede asumir que no hay 0 a la izquierda en los enteros positivos.
- Salida:
- Por cada entero positivo en la entrada , la salida consiste de una serie de números formados cuando el último digito es borrado y restando al numero truncado, seguido por un mensaje que indica si el número original es o no divisible por 11. Las salidas para diferentes enteros positivos son separadas por líneas.
- Ejemplo del archivo de entrada:
- 12345678901234567900
- 89624630004
- 0
- Ejemplo del archivo de salida:
- 12345678901234567900
- 1234567890123456790
- 123456789012345679
- 12345678901234558
- 1234567890123447
- 123456789012337
- 12345678901226
- 1234567890116
- 123456789005
- 12345678895
- 1234567884
- 123466784
- 12345674
- 1234563
- 123453
- 12342
- 1232
- 121
- 11
- El número 12345678901234567900 es divisible entre 11.
- 89624562996
- 8962456293
- 896245626
- 89624556
- 8962449
- 896235
- 89618
- 8953
- 892
- 87
- El número 896245630004 no es divisible entre 11.
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement