const int N=1100;struct BigNum...{ int front; int data[N+1];};BigNum& Mulit(BigNum up, BigNum down)...{ int i,k,carry,v; BigNum prod; prod.front=up.front+down.front-N+1; for(i=prod.front;i<=N;i++)prod.data[i]=0; for(i=N;i>=down.front;i--)...{ BigNum tmp; carry=0; for(k=N;k>=up.front;k--)...{ v=down.data[i]*up.data[k]+carry; tmp.data[k]=v%10; carry=v/10; } tmp.front=up.front; if(carry>0) tmp.data[--tmp.front]=carry; carry=0; for(k=N;k>=tmp.front;k--)...{ v=tmp.data[k]+prod.data[i+k-N]+carry; // when i==N, k to k, then i is decreased 1 each step. prod.data[i+k-N]=v%10; carry=v/10; } while(carry>0)...{ v=prod.data[i+k-N]+carry; prod.data[i+k-N]=v%10; carry=v/10; k--; } } while(prod.data[prod.front]==0 && prod.front<N) prod.front++; return prod;}//30'