220 = 1 + 2 + 4 + 5 + 10 + 11 + 20 + 22 + 44 + 55 + 110 = 284
284 = 1 + 2 + 4 + 71 + 142 = 220
Entrada
La entrada consiste de varios casos de prueba hasta fin de archivo. Cada caso de prueba consiste en un número entero <= 1000.
Salida
Por cada caso de prueba imprima en una linea su número amigo. Si no tiene un amigo imprima -1.
Ejemplos de entrada
2
6
1298
5637
284
7962
220
Ejemplos de salida
-1
6
-1
-1
220
-1
284
Lo que hice fue lo siguiente:
Código
Y EL PROGRAMA ESTA BIEN, PERO AHORA SI PONGO UN WHILE PARA QUE SE REPITA TODO Y ASI PODER HACER LOS 1000 CASOS DE PRUEBA QUE PIDE ... EMPIEZAN A SALIR MAL LOS RESULTADOS, SOLO SALE BIEN EL PRIMER RESULTADO Y DE AHI TODO SALE -1 .. NO SE QUE HACER! AYUDA! POR FAVOR!
#include <iostream> using namespace std; int main() { int num, i, sum=0, sum2=0; cin >> num; for (i=1; i<num; i++) { if (num%i==0) { sum = sum+i;} } for (int j=1; j<sum; j++) { if (sum%j ==0) sum2=sum2+j; } if (sum2 == num) {cout << sum << endl; } else {cout << "-1"<< endl; } }
POR QUE ESTO ESTA MAL? COMO DEBERIA DE SER?
Código
#include <iostream> using namespace std; int main() { int num, i, sum=0, sum2=0; cin >> num; [b]while (n<=1000)[/b]{ for (i=1; i<num; i++) { if (num%i==0) { sum = sum+i;} } for (int j=1; j<sum; j++) { if (sum%j ==0) sum2=sum2+j; } if (sum2 == num) {cout << sum << endl; } else {cout << "-1"<< endl; } [b]cin >> num<< endl; } [/b] }
[MOD] Usar las etiquetas GeShi, al publicar codigo.