Чото я совсем разучился, никак не могу сообразить. Вот что я сумел сделать, плохо, я знаю, но я старался. Плюс и минус я легко сделал, а вот это никак. Пока только обошёлся умножением любого числя на 3-х значное... Числа только целые.
Код | AnsiString _umn(AnsiString x,AnsiString y) { AnsiString ret,tmp,tmp1="",tmp2="",tmp3=""; int a,b,t; if(x=="0"||y=="0")return "0"; a=x.Length(); b=y.Length(); if(a<b){t=a;a=b;b=t;tmp=x;x=y;y=tmp;}t=0; if(b > 3)return _umn_3x(x,y); while(a>=1) //1 ; { t=StrToInt(x[a])*StrToInt(y[b])+t; tmp=IntToStr(t);if(t>=10){t=StrToInt(tmp[1]);tmp=tmp[2];}else t=0; tmp1=tmp+tmp1; a--; if(t!=0&&a==0)tmp1=IntToStr(t)+tmp1; }//end while; a=x.Length();b--;t=0; if(b>0){ while(a>=1) //2 ; { t=StrToInt(x[a])*StrToInt(y[b])+t; tmp=IntToStr(t);if(t>=10){t=StrToInt(tmp[1]);tmp=tmp[2];}else t=0; tmp2=tmp+tmp2; a--; if(t!=0&&a==0)tmp2=IntToStr(t)+tmp2; }//end while; tmp2=tmp2+"0";}//end if b>0; a=x.Length();b--;t=0; tmp3; if(b>0){ while(a>=1) //3 ; { t=StrToInt(x[a])*StrToInt(y[b])+t; tmp=IntToStr(t);if(t>=10){t=StrToInt(tmp[1]);tmp=tmp[2];}else t=0; tmp3=tmp+tmp3; a--; if(t!=0&&a==0)tmp3=IntToStr(t)+tmp3; }//end while; tmp3=tmp3+"00";}//end if b>0; tmp=_plus(tmp1,tmp2); ret=_plus(tmp,tmp3); return ret; } /****************/ AnsiString _umn_3x(AnsiString x,AnsiString y) { AnsiString ret=x; int a,b,bb; a=x.Length();b=y.Length(); bb=StrToInt(y); if(b==0||a==0||bb==0||x=="0")return"0"; for(int i=2; i<=bb; i++) { ret=_plus(ret,x); }//next i; return ret; } /****************/
|
C делением более менее норм.
|