不用乘除法实现两数相除得商,不用加减法实现两数相加

import numpy as np
class Solution(object):
    def divide(self, dividend, divisor):
        if dividend*divisor>0:
            flag=1#符号相同
        else:
            flag=0
        dividend=np.abs(dividend)
        divisor=np.abs(divisor)
        m=len(str(dividend))
        n=len(str(divisor))
        if m<n:
            return 0
        m_list=[]#用于储存dividend的每一位数
        answer=[]#从高位到低位储存商每一位的数字
        for i in range(m):
            m_list.append(int(str(dividend)[i]))
        temp=[]
        for i in range (m):
            z=''
            if len(temp)!=0:
                for j in range(len(temp)):
                    z+=str(temp[j])
                z+=str(m_list[i])
                z=int(z)
                if z<divisor:
                    temp.append(m_list[i])
                    answer.append(0)
                else:
                    count=0
                    while z-divisor>=0:
                        z=z-divisor
                        count+=1
                    answer.append(count)
                    if z!=0:
                        temp=[]#先清空
                        temp.append(z)
                    else:
                        temp=[]

            else:
                if m_list[i]<divisor:
                    answer.append(0)
                    temp.append(m_list[i])
                else:
                    p=m_list[i]
                    count=0
                    while p-divisor>=0:
                        p=p-divisor
                        count+=1
                    answer.append(count)
                    if p!=0:
                        temp=[]
                        temp.append(p)
        answer=answer[np.where(answer!=0)[0][0]:]
        final=''
        for k in answer:
            final+=str(k)
        final=int(final)
        if flag==1:
            final=final
            if final>2147483647:
                final=2147483647
        else:
            if final>=2147483648:
                final=2147483648
            final=-final
           
        
        return final

import numpy as np
class Solution(object):
    def getSum(self, a, b):
        ll=[]
        if a*b>0:
            flag=1
        elif a==0:
            return b
        elif b==0:
            return a
        else:
            flag=0
        if flag==1:
            final=self.Length(np.abs(a),np.abs(b))
            if a<0:
                final=-final
        else:
            g_val=np.max([np.abs(a),np.abs(b)])
            g_idx=np.argmax([np.abs(a),np.abs(b)])
            g=[a,b][g_idx]
            [a,b].pop(g_idx)
            s_val=[a,b][0]
            final=self.Length(np.abs(g_val),-np.abs(s_val))
        return final     
    def Length(self,a,b):
        ll=[]
        for p in [a,b]:
            if p>0:
                for i in range(np.abs(p)):
                    ll.append(1)
            else:
                for i in range(np.abs(p)):
                    ll.pop()
        return len(ll)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值