Bueno estaba realizando ejercicios y ahora que acabo de terminarlo y antes de seguir con los demás quiero saber como mejorarlo ( voy a mirar la forma de hacerlo con un bucle en vez de tanto if, y la otra duda es cuando meto mas dígitos en el entero de que lo que soporta ejemplo 99999999999999999, el programa ( al menos a mi ) entra en bucle y se queda bloqueado alguna forma de solucionarlo ( no tendría por que hacerlo pero así voy aprendiendo).
Paso código:
// 21. Un número entero n se dice que es desgarrable (torn) si al dividirlo en dos partes
// cualesquiera izda y dcha, el cuadrado de la suma de ambas partes es igual a n. Por ejemplo,
// 88209 es desgarrable ya que (88 + 209)2 = 88209; 81 también lo es ya que 81 =
// (8+1)2.Cread un programa que lea un entero ne indique si es ono desgarrable.
// Finalidad: Ejercitar los bucles. Dificultad Baja.
#include <iostream>
#include <cmath>
using namespace std;
int main() {
// Variables y constantes
int numero_introducido = 0, contador = 1, cifra1 = 0, cifra2 = 0, cifra3 = 0, cifra4 = 0, cifra5 = 0, cifra6 = 0, numero_backup = 0, operado = 0, cifra_total = 0, concatenacion1 = 0, concatenacion2 = 0;
// Entrada del programa
do{
cout << "Introduzca un numero para comprobar si es desgarrable: " << endl;
cin >> numero_introducido;
}while(numero_introducido > 999999);
numero_backup = numero_introducido;
// Resolucion del programa
while (numero_introducido / 10 > 0){
numero_introducido = numero_introducido / 10;
contador++;
}
cout << "Cifras del numero introducido son: " << contador << endl;
if(contador == 1){
cout << "El numero no es desgarrable: " << numero_introducido << endl;
}
else if (contador == 2){
// Con el algoritmo de la division a = b+c + r
// Cociente y resto
cifra1 = numero_backup / 10;
cifra2 = numero_backup % 10;
cifra_total = cifra1 + cifra2;
operado = pow(cifra_total, 2);
if(numero_backup == operado){
cout << "El numero: " << numero_backup << " es un numero desgarrable. " << endl;
}
else{
cout << "No es un numero desgarrable" << endl;
}
}
else if (contador == 3){
cifra1 = numero_backup / 100;
cifra2 = (numero_backup % 100) / 10;
cifra3 = numero_backup % 10;
concatenacion1 = (cifra1 * 10) + cifra2;
cout << concatenacion1 << endl;
concatenacion2 = cifra3;
cout << concatenacion2 << endl;
cifra_total = concatenacion1 + concatenacion2;
operado = pow(cifra_total,2);
if (numero_backup == operado){
cout << "El numero: " << numero_backup << " es un numero desgarrable. " << endl;
}
else{
cout << "No es un numero desgarrable." << endl;
}
}
else if (contador == 4){
cifra1 = numero_backup / 1000;
cifra2 = (numero_backup % 1000) / 100;
cifra3 = (numero_backup % 100) / 10;
cifra4 = (numero_backup % 10);
concatenacion1 = (cifra1 * 10) + cifra2;
concatenacion2 = (cifra3 * 10) + cifra4;
cifra_total = (concatenacion1) + (concatenacion2);
operado = pow(cifra_total, 2);
if (numero_backup == operado){
cout << "El numero: " << numero_backup << " es un numero desgarrable. " << endl;
}
else{
cout << "No es un numero desgarrable." << endl;
}
}
else if (contador == 5){
cifra1 = numero_backup / 10000;
cifra2 = (numero_backup % 10000) / 1000;
cifra3 = (numero_backup % 1000) / 100;
cifra4 = (numero_backup % 100) / 10;
cifra5 = (numero_backup % 10);
concatenacion1 = (cifra1 * 10) + cifra2;
concatenacion2 = (cifra3 * 100) + (cifra4 * 10) + cifra5;
cifra_total = concatenacion1 + concatenacion2;
operado = pow(cifra_total, 2);
if (numero_backup == operado){
cout << "El numero: " << numero_backup << " es un numero desgarrable. " << endl;
}
else{
cout << "No es un numero desgarrable. " << endl;
}
}
else if (contador == 6){
cifra1 = numero_backup / 100000;
cifra2 = (numero_backup % 100000) / 10000;
cifra3 = (numero_backup % 10000) / 1000;
cifra4 = (numero_backup % 1000) / 100;
cifra5 = (numero_backup % 100) / 10;
cifra6 = (numero_backup % 10);
concatenacion1 = (cifra1 * 100) + (cifra2 * 10) + cifra3;
concatenacion2 = (cifra4 * 100) + (cifra5 * 10) + cifra6;
cifra_total = concatenacion1 + concatenacion2;
operado = pow(cifra_total, 2);
if (numero_backup == operado){
cout << "El numero: " << numero_backup << " es un numero desgarrable. " << endl;
}
else{
cout << "No es un numero desgarrable. " << endl;
}
}
return 0;
}