Pagini recente » Cod sursa (job #2881352) | Cod sursa (job #784934) | Cod sursa (job #2178535) | Cod sursa (job #3216245) | Cod sursa (job #208755)
Cod sursa(job #208755)
#include <stdio.h>
#include <string.h>
FILE *fin,*fout;
int a[4001],b[4001],c[4001],x[2];
int i,n,aux;
char s[1001];
void adunare(int a[4001], int b[4001]){
int i,t=0;
for(i=1;i<=a[0] || i<=b[0] || t;i++, t /= 10)
a[i]=(t += a[i]+b[i]) %10;
a[0]=i-1;
}
void mul(int a[4001], int b[4001]){
int i,j,t,c[4001];
memset(c,0,sizeof(c));
for(i=1;i<=a[0];i++){
for(t=0,j=1;j<=b[0] || t;j++,t /= 10)
c[i+j-1]=(t+= c[i+j-1]+a[i]*b[j])%10;
if(i+j-2>c[0]) c[0]=i+j-2;
}
memcpy(a,c,sizeof(c));
}
void mul_mic(int a[4001], int b){
int i,t=0;
for(i=1;i<=a[0] || t;i++, t /= 10)
a[i]=(t += a[i]*b) %10;
a[0]=i-1;
}
void sub(int a[4001], int b){
int i,t=-b;
for(i=1;i<=a[0];i++){
a[i] +=10+t;
t=a[i]/10;
a[i+1]--;
a[i]=a[i]%10;
}
if(a[a[0]+1]<0) a[a[0]+1]=0;
for(;a[0]>1 && !a[a[0]]; a[0]--);
}
int main(){
fin=fopen("sarpe.in","r");
fout=fopen("sarpe.out","w");
fscanf(fin,"%s\n",&s);
n=strlen(s);
for(i=0;i<n;i++) a[i+1]=s[i]-'0';
if(n==1 && a[1]==1) fprintf(fout,"2\n");
else{
for(i=1;i<=n/2;i++) {aux=a[i]; a[i]=a[n-i+1]; a[n-i+1]=aux; }
for(i=1;i<=n;i++) { b[i]=a[i]; c[i]=a[i]; }
a[0]=strlen(s); b[0]=a[0]; c[0]=a[0];
x[1]=1;
sub(b,1);
x[1]=2;
sub(c,2);
mul_mic(b,2);
mul(b,c);
mul_mic(a,4);
adunare(a,b);
for(i=a[0];i>=1;i--) fprintf(fout,"%d",a[i]);
fprintf(fout,"\n");
}
fclose(fin); fclose(fout);
return 0;
}