讨论 / 提交了不下十次!!! 终于全过
Andyyy 2018-05-03 04:31:31
点我顶贴 收藏 删除
#include <stdio.h>

const int len=2520;

int x[len]= {0,};

void normalize(int a[]) {

for (int i=0; i<len; i++) {

if(a[i]/10000>=1) {

a[i+1]=a[i+1]+a[i]/10000;

a[i]=a[i]%10000;

}

}

}

void valuate(int a[len],int b[len]) {

for(int i =0; i<len; i++) {

a[i]=b[i];

}

}

int dezero(int a[len]) {

int ret=0;

for (int k=0; k<len; k++) {

x[k]=-1;

}

for(int i=0,j=0; i<len; i++) {

if (a[i]!=0) {

x[j]=i;

j++;

ret++;

}

}

return ret;

}

void add(int a[len],int b[len] ) {

int lena=dezero(a);

for(int i=0; i<lena; i++) {

// if(x[i]==-1) {

// break;

// }

int y=b[x[i]];

b[x[i]]=(b[x[i]]+a[x[i]])%10000;

b[x[i]+1]+=(y+a[x[i]])/10000;

}

}

void mulitiply(int a,int b[len],int b1[len]) {

// int xa[len];

int xb[len];

// int t=0;

// for(int i= 0; i<len/2; i++) {

// for (int j=0, x=0 ; j<len/2; j++) {

// x=c[i+j];

// c[j+i]=(a[j]*b[i]+t+c[i+j])%10000;

// t=(a[j]*b[i]+t+x)/10000;

// int lena=dezero(a);

// valuate(xa,x);

int lenb=dezero(b);

valuate(xb,x);

// for(int i=0; i<lena||i==0; i++) {

for(int j=0; j<lenb; j++) {

b1[xb[j]]+=a*b[xb[j]];

}

// }

normalize(b1);

}

void output(int a[len]) {

int j= 0;

for(int i=len-1,num=0; i>=0; i--) {

if(a[i]!=0) {

j++;

}

if(j==1) {

printf("%d",a[i]);

j++;

continue;

}

if(j>1) {

printf("%.4d",a[i]);

}

}

// printf("\n%d",4*(j-1));

}

int main () {

int a ,b, c ,n;

int xm[len]= {1,},y[len]= {0,},z[len]= {0,};

scanf("%d %d %d %d",&a,&b,&c,&n);

for(int i=1; i<=n; i++) {

int t[len]= {0,};

mulitiply(a,xm,t);

mulitiply(b,y,t);

mulitiply(c,z,t);

add(y,z);

valuate(y,xm);

valuate(xm,t);

}

// x=a*x+b*y+c*z;

// y=t;

// z+=p;

add(xm,z);

add(y,z);

output(z);

// printf("%ld",(x+y+z));

// int a[10]={8234,31,51};

// int b[10]={3000,43};

// int c[20]={0};

// mulitiply(a,b,c);

// for(int i=9;i>=0;i--){

// printf("%.4d",c[i]);}

return 0;

}

查看更多回复
提交回复