-
Notifications
You must be signed in to change notification settings - Fork 0
/
2-01-digitoscomplementarios.cpp
69 lines (56 loc) · 1.75 KB
/
2-01-digitoscomplementarios.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
// Nuria Bango Iglesias
// VJ04
#include <iostream>
#include <iomanip>
#include <fstream>
using namespace std;
// un digito es complementario de otro si la suma de ambos es 9
// O(1)
int digComp(int n) {
return 9 - n;
}
// dado un numero entero, devuelve el numero formado por los digitos complementarios
// O(p) donde p es el numero de digitos del numero n
int complementario(int n) {
// caso base: un solo digito
if (n <= 9)
return digComp(n);
// se llama a la recurrencia con n/10 para quitar el digito mas a la derecha
// y que comience por el digito mas a la izquierda a calcular el complementario
int r = complementario(n / 10);
// se multiplica el resultado de la llamada recursiva por 10 y se le suma el complementario del
// ultimo digito para recombinar los complementarios de los digitos y formar el complementario
// del numero entero original
return r * 10 + digComp(n % 10);
}
// dado un numero entero, devuelva el inverso del numero formado por los digitos complementarios
// O(p) donde p es el numero de digitos del numero n
pair<int, int> complementarioInverso(int n) {
// caso base: un solo digito
if (n <= 9)
return { digComp(n), 10 };
auto result = complementarioInverso(n / 10);
int r = result.first; // complementario parcial calculado
int p = result.second; // posicion del lugar del digito
return { digComp(n % 10) * p + r, p * 10 };
}
void resuelveCaso() {
int n;
cin >> n;
cout << complementario(n) << " " << complementarioInverso(n).first << "\n";
}
int main() {
#ifndef DOMJUDGE
std::ifstream in("datos.txt");
auto cinbuf = std::cin.rdbuf(in.rdbuf());
#endif
int numCasos;
cin >> numCasos;
for (int i = 0; i < numCasos; i++)
resuelveCaso();
#ifndef DOMJUDGE
std::cin.rdbuf(cinbuf);
system("PAUSE");
#endif
return 0;
}