Pagini recente » Cod sursa (job #2541406) | Cod sursa (job #116240)
Cod sursa(job #116240)
#include<fstream.h>
#include<iostream.h>
#include<iomanip.h>
#define special resetiosflags(ios::skipws)
#define LMAX 2000
fstream f("sarpe.in",ios::in),g("sarpe.out",ios::out);
char s;
int n1=1,n2,n3,v1[LMAX],v2[LMAX],v3[LMAX],fin[LMAX],i,j;
void adun()
{for(i=1;i<=n3;i++) fin[i]+=v3[i];
int max; if(n3>n2) max=n3;
else max=n2;
for(j=1;j<=max;j++)
if(fin[j]>9)
{fin[j]=fin[j]%10;
fin[j+1]+=1;} if(fin[j]>0) max++;
for(i=max;i>=1;i--) g<<fin[i];}
void inm_M()
{int k=-1,var;
for(i=1;i<=n1;i++) {k++;
for(j=1;j<=n2;j++) fin[j+k]+=v1[i]*v2[j];}
for(i=1;i<=n2+k;i++)
if(fin[i]>9) {fin[i+1]+=fin[i]/10; fin[i]=fin[i]%10;}
n2=n2+k;
while(fin[n2+1]!=0)
{n2++; fin[n2+1]+=fin[n2]/10; fin[n2]=fin[n2]%10;} }
void invert()
{int aux;
for(i=1;i<=n1/2;i++)
{aux=v1[n1-i+1]; v1[n1-i+1]=v1[i]; v1[i]=aux;}
for(i=1;i<=n1;i++) v3[i]=v2[i]=v1[i]; }
void scad_m(int x,int &end,int *v)
{v[1]-=x; i=1;
while(v[i]<0) {v[i]+=10; i++; v[i]-=1;}
if(v[end]==0) end--;
}
void inm_m(int x,int &end,int *v)
{int var,ad=0;
for(i=1;i<=end;i++)
{var=v[i]*x+ad; v[i]=var%10; ad=var/10;}
if(ad!=0) {end++; v[end]=ad;} }
main()
{
f>>special>>s;
while(s>='0' && s<='9') {v1[n1++]=s-48; f>>special>>s;} n1--;
if(n1==1 && v1[1]==1) g<<2;
else{
n2=n3=n1; invert();
scad_m(1,n1,v1); scad_m(2,n2,v2);
inm_M(); inm_m(4,n3,v3); inm_m(2,n2,fin); adun();
}
}
//4n+2*(n-1)*(n-2),n>1