Pagini recente » Cod sursa (job #1395512) | Cod sursa (job #1030884) | Cod sursa (job #2564663) | Cod sursa (job #10497) | Cod sursa (job #1429515)
#include<fstream>
#include<cstring>
using namespace std;
int n, i;
int sol[5000], v[2000], w[2000], r[2000];
char s[2000];
ifstream fin("sarpe.in");
ofstream fout("sarpe.out");
void copiere(int v[], int w[]){
for(int i = 0; i <= w[0]; i++){
v[i] = w[i];
}
}
void adunare(int v[], int w[]){
int m = max(v[0], w[0]);
v[0] = m;
int t = 0;
for(i = 1; i <= m; i++){
v[i] += w[i] + t;
t = v[i] / 10;
v[i] %= 10;
}
if(t != 0){
v[++v[0]] = t;
}
}
void scadere(int v[], int x){
if(v[1] >= x){
v[1] -= x;
}
else{
v[1] = 10 + v[1] - x;
int i = 2;
while(v[i] == 0){
v[i] = 9;
i++;
}
v[i]--;
}
}
void mult(int v[], int x){
int i, t = 0;
for(i = 1; i <= v[0]; i++){
v[i] = v[i] * x + t;
t = v[i] / 10;
v[i] %= 10;
}
while(t != 0){
v[++v[0]] = t % 10;
t /= 10;
}
}
void inmultire(){
int i, j, t, x;
for(i = 1; i <= v[0]; i++){
t = 0;
for(j = 1; j <= w[0]; j++){
sol[i + j - 1] += v[i] * w[j] + t;
t = sol[i + j - 1] / 10;
sol[i + j - 1] %= 10;
}
x = i + w[0] - 1;
while(t != 0){
x++;
sol[x] += t;
t = sol[x] / 10;
sol[x] %= 10;
}
sol[0] = max(sol[0], x);
}
}
int main(){
fin>> s + 1;
n = strlen(s + 1);
r[0] = n;
for(i = 1; i <= n; i++){
r[n - i + 1] = s[i] - '0';
}
copiere(v, r);
copiere(w, r);
scadere(v, 1);
scadere(w, 2);
mult(r, 4);
inmultire();
mult(sol, 2);
adunare(sol, r);
for(i = sol[0]; i >= 1; i--){
fout<< sol[i];
}
fout<<"\n";
return 0;
}