反转数组
void reverse(char * c)
{
int len = strlen(c);
for(int i=0; i<len/2; i++)
swap(c[i],c[len-i-1]);
}
乘法模板
void multiplication(char * srca,char * srcb,char * dest)//未翻转
{
int ia,ib,c,
na = strlen(srca),
nb = strlen(srcb);
reverse(srca);
reverse(srcb);
for(ia=0; ia<na; ia++)
{
c = 0;
for(ib=0; ib<nb; ib++)
{
int t = (srca[ia]-48) * (srcb[ib]-48) + c,tt;
if(dest[ia+ib]>47)
tt = dest[ia+ib]-48 + t;
else
tt = t;
dest[ia+ib] = tt%10 +48;
c = tt/10;
}// for
while(c) //处理进位,直到进位为0
{
int t;
if(dest[ia+ib]>47)
t = dest[ia+ib] - 48 + c;
else
t = c;
dest[ia+ib++] = t%10 + 48;
c /= 10;
}// while
}// for
//将两个乘数和乘积都改为大端法
reverse(dest);
reverse(srca);
reverse(srcb);
}
除法模板
void division(char * src,int n,char * dest)
{
int len = strlen(src),
i, //计数
k, //商的下标
t = 0, //新的余数
s = 0; //余数
bool flag = true; //商是否有了第一个有效位,防止商首部一直出现0
for(i=0,k=0; i<len; i++)
{
t = s*10+(src[i]-48); //新余数
if(t/n>0 || t==0) //余数为0要修改商
dest[k++] = t/n+48,s = t%n,flag = false;
else //不够除,修改余数
{
s = t;
if(!flag) //商已经有有效位了,补零
dest[k++] = '0';
}// if
}// for
//::memset(src,0,len);
//memcpy(src,dest,strlen(dest));
}