Pagini recente » Cod sursa (job #810412) | Cod sursa (job #1580069) | Cod sursa (job #426110) | Cod sursa (job #2024580) | Cod sursa (job #2332898)
#include <fstream>
#include <cstring>
#define DIM 1000000
using namespace std;
ifstream fin ("sarpe.in");
ofstream fout ("sarpe.out");
int a[DIM],v[DIM],sol[DIM],x[DIM];
int i;
char s[DIM];
void inmultire (int c[],int a[],int b){
int t = 0;
for (int i=1;i<=a[0];i++){
c[i] = a[i]*b+t;
t = c[i]/10;
c[i] %= 10;
}
c[0] = a[0];
while (t){
c[++c[0]] = t%10;
t /= 10;
}
}
void scade (int v[]){
int i = 1;
while (i <= v[0] && v[i] == 0){
v[i] = 9;
i++;
}
v[i]--;
if (i == v[0] && v[i] == 0)
v[0]--;
}
void inmultire_mare (int c[],int a[],int b[]){
c[0] = a[0]+b[0]-1;
for (int i=1;i<=a[0]+b[0];i++)
c[i] = 0;
for (int i=1;i<=a[0];i++)
for (int j=1;j<=b[0];j++)
c[i+j-1] += a[i]*b[j];
int t = 0;
for (i=1;i<=c[0];i++){
c[i] = c[i] + t;
t = c[i] / 10;
c[i] %= 10;
}
while (t){
c[++c[0]] = t%10;
t /= 10;
}
}
void aduna (int c[],int a[],int b[]){
int m;
if (a[0] > b[0]){
m = a[0];
for (int i=b[0]+1;i<=m;i++)
b[i] = 0;
} else {
m = b[0];
for (int i=a[0]+1;i<=m;i++)
a[i] = 0;
}
int t = 0;
for (int i=1;i<=m;i++){
c[i] = a[i] + b[i] + t;
t = c[i] / 10;
c[i] %= 10;
}
c[0] = m;
while (t){
c[++c[0]] = t%10;
t /= 10;
}
}
int main (){
fin>>s+1;
v[0] = strlen (s+1);
for (i=1;i<=v[0];i++)
v[v[0]-i+1] = s[i]-'0';
if (v[0] == 1 && v[1] == 1){
fout<<1;
return 0;
}
for (i=1;i<=v[0];i++)
a[i] = v[i];
a[0] = v[0];
/// 4*n + 2*(n-1)*(n-2)
inmultire (sol,a,4);
/// scadem 1
scade (v);
inmultire(v,v,2);
scade (a);
scade (a);
inmultire_mare (x,v,a);
aduna (sol,sol,x);
for (i=sol[0];i>=1;i--)
fout<<sol[i];
return 0;
}