Repository navigation
Expand file tree
/
Copy pathP048.cpp
More file actions
89 lines (88 loc) · 1.96 KB
/
Copy pathP048.cpp
File metadata and controls
89 lines (88 loc) · 1.96 KB
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#include <iostream>
#include <cstring>
using namespace std;
class Esquisita{
public:
unsigned char N[10];
Esquisita(void){
for(unsigned int i=0;i<10;i++){
N[i]=0;
}
}
void Incrementar(void){
unsigned char r=1;
for(unsigned int i=0;i<10;i++){
N[i]+=r;
r=N[i]-N[i]%10;
N[i]-=r;
r/=10;
}
}
void Adicionar(Esquisita&B){
unsigned char r=0;
for(unsigned int i=0;i<10;i++){
N[i]+=B.N[i]+r;
r=N[i]-N[i]%10;
N[i]-=r;
r/=10;
}
}
inline void MultiplicarPor10(void){
for(unsigned int i=9;i;i--){
N[i]=N[i-1];
}
N[0]=0;
}
inline void Multiplicar(unsigned int k){
unsigned int r=0;
for(unsigned int i=0;i<10;i++){
N[i]*=k;
N[i]+=r;
r=N[i]-(N[i]%10);
N[i]-=r;
r/=10;
}
}
void Multiplicar(Esquisita&X){
Esquisita S;
for(unsigned int i=0;i<10;i++){
S.MultiplicarPor10();
Esquisita T=X;
T.Multiplicar(N[9-i]);
S.Adicionar(T);
}
(*this)=S;
}
void Elevar(unsigned int k){
Esquisita T;
T.N[0]=1;
for(unsigned int i=0;i<k;i++){
T.Multiplicar(*this);
}
(*this)=T;
}
unsigned long long int ToULLInt(){
unsigned long long int s=0;
for(unsigned int i=0;i<10;i++){
s*=10;
s+=N[9-i];
}
return s;
}
};
unsigned long long int P048(){
Esquisita S,N;
for(unsigned int i=1;i<=1000;i++){
N.Incrementar();
{
Esquisita T=N;
T.Elevar(i);
S.Adicionar(T);
}
}
return S.ToULLInt();
}
int main(){
cout<<P048()<<endl;
return 0;
}