大数乘法除法

反转数组

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));  
}   
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值