Мне кажется что тут не хватает вот этого (если разберёшься ты молодец):
| Код | #include<string.h> #include<mem.h> #include<stdio.h> #include<conio.h> #include<math.h> #include<stdlib.h> #include<dos.h> #define o 10000L #define o2 o*o int c,c1; FILE *out=fopen("c:\\test.txt","w"); int more(int *x,int *y,int sd) { int i,j; if( (x[0]==0) && (y[0]==0) ) return 2; if(x[0]>y[0]+sd) return 0; if(x[0]<y[0]+sd) return 1; i=y[0];j=i+sd; while ( (x[j]==y[i]) && i) {j--;i--; } if(i==0) return 2; else return x[j]<y[i];
} void razn(int *x,int *y, int sd) { int i,per=0,tmp; for(i=1;i<=y[0];i++){ tmp=x[i+sd]-y[i]-per; if(tmp<0){ per=1; x[i+sd]=tmp+o; }else { per=0; x[i+sd]=tmp; } } if(per) x[i+sd]-=1; i=x[0]; while(x[i]==0) i--; x[0]=i;
} void mul_c(int *x,int m,int *p) { int i,per=0; long tmp; for(i=1;i<=x[0];i++){ tmp=(long)x[i]*m+per; p[i]=tmp%o; per=tmp/o; } if(per){ p[0]=x[0]+1; p[p[0]]=per; }else p[0]=m ? x[0]:0; } int find(int *x,int *y,int sd) { int dn=0,up=o,p[1000],i; while(up-1>dn){ memset(p,0,2000); mul_c(y,(up+dn)/2,p); switch (more(x,p,sd)){ case 0: dn=(up+dn)/2; break; case 1: up=(up+dn)/2; break; case 2: up=dn=(up+dn)/2; break; } } memset(p,0,2000); mul_c(y,(up+dn)/2,p); if ( !(more(x,p,0)==1) ) razn(x,p,sd); return (up+dn)/2; } int find1(int *x,int *y,int sd,long double qdel) { int q,p[1000],x_1,x_2,y_1; long double tmp; if( !(more(x,y,x[0]-y[0])==1) ) //0 a>b;1 a<b;2 a=b x[0]++; //esli pervue cifru x bolishe(=) to dobavliam lidiruychii 0 x_1=(x[0]>=2) ? x[x[0]-1] : 0; x_2=(x[0]>=3) ? x[x[0]-2] : 0; tmp=(long double)x[x[0]]*o2+(long double)x_1*o+x_2; q=floor( tmp/qdel); memset(p,0,2000); mul_c(y,q,p); //esli yvelichiti o to nuzno peredeluvati c++; if(more(x,p,sd)==1 ) { c1++; q--; razn(p,y,0); } razn(x,p,sd); /*mozno srazu vuchitati bez more i esli x<0 to + y, q-- hotia na vremia eto sychestvenno ne povliaet c c1 */ return q; } void print_l(int *x,char *y) { int i,j,n=0,tmp=o/10; char tch[100]; while(tmp) {tmp/=10;n++;} y[0]=0; itoa(x[x[0]],y,10); for(i=x[0]-1;i>0;i--){ tmp=x[i]; for(j=0;j<n;j++){ itoa(tmp*10L/o,tch,10); strcat(y,tch); tmp=tmp*10L%o; } } } void s_l(int *x,int *y,int *z) { int ml,per=0,i,tmp; ml=(x[0]>y[0])? x[0]:y[0]; for(i=1;i<=ml;i++){ tmp=x[i]+y[i]+per; z[i]=tmp%o; per=tmp/o; } z[0]=ml; if(per){ z[0]++; z[z[0]]=1; } } void a_al(char *x,int *y) { int i=0,i1; while(x[i++]){ for(i1=y[0];i1;i1--){ y[i1+1]+=y[i1]*10L/o; y[i1]=y[i1]*10L%o; } y[1]+=x[i-1]-'0'; if(y[y[0]+1]) y[0]++; } } void p_l(int *al1,int *al2,int *p) { int i,j,per; long tmp; for(i=1;i<=al2[0];i++){ per=0; for(j=1;j<=al1[0];j++){ tmp=1L*al2[i]*al1[j]+per+p[i+j-1]; per=tmp/o; p[i+j-1]=tmp%o; } if(per) p[i+j-1]=per; }
i=al1[0]+al2[0]+2; while(p[i]==0) i--; p[0]=i;
} void d_l(int *a,int *b,int *rez,int *ost) { int i,j,*tmp, sp,d=o/(b[b[0]]+1),y_1; long double qdel; if(d>1){ mul_c(a,d,a); mul_c(b,d,b); } // y_1=(y[0]>=2) ? y[y[0]-1] : 0; toliko esli delim na odnu cifru y_1=b[b[0]-1]; qdel=(long double)b[b[0]]*o+y_1; sp=a[0]-b[0]; if(more(a,b,sp)==1) sp--; //0 a>b;1 a<b;2 a=b rez[0]=sp+1; tmp=a; while(sp>=0){ rez[sp+1]=find(tmp,b,sp); // rez[sp+1]=find1(tmp,b,sp,qdel); if(sp==0) break; while(more(tmp,b,sp)==1 && sp>0) {sp--;rez[sp+1]=0;} } for(i=0;i<=tmp[0];i++) ost[i]=tmp[i]; } void main() { int al[1000],al1[1000],sl[1000],p[1000],i,del[1000],ost[1000]; struct time t; FILE *in=fopen("c:\\un.txt","r"); char a[10000],a1[10000],a3[10000],a4[10000]; clrscr(); for(i=0;i<1000;i++) al[i]= al1[i]=sl[i]=p[i]=del[i]=ost[i]=0; fscanf(in,"%s",a); a_al(a,al); fscanf(in,"%s",a1); fprintf(out,"a= %s\n",a); fprintf(out,"a1= %s\n",a1); a_al(a1,al1); p_l(al,al1,p); print_l(p,a4); fprintf(out,"p=a*a1= %s\n",a4);
gettime(&t); printf("The current time is: %2d:%02d:%02d.%02d\n", t.ti_hour, t.ti_min, t.ti_sec, t.ti_hund); d_l(p,al1,del,ost); gettime(&t); printf("The current time is: %2d:%02d:%02d.%02d\n", t.ti_hour, t.ti_min, t.ti_sec, t.ti_hund); printf("c = %d c1 = %d",c,c1); print_l(del,a1); print_l(ost,a3); fprintf(out,"p/a1=%s\n",a1); fprintf(out,"a= %s\n",a); fprintf(out,"p ost a1= %s\n",a3); i=0; }
|
Возьми отсюда то что тебе нужно |