首页 > 试题广场 >

不用算术运算符实现整数的加减乘除运算

[编程题]不用算术运算符实现整数的加减乘除运算
  • 热度指数:1206 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给定两个32位整数a和b。要求不使用算术运算符,分别实现a和b的加减乘除运算。如果给定的a和b执行加减乘除的某些结果本来就会导致数据的溢出,那么你实现的函数不需要对那些结果负责(你的输出和加减乘除溢出的结果保持一致就行)。

输入描述:
输出一行,包含两个整数a和b(a和b均为32位整数)和一个运算符,运算符为“+”,“-”,“*”,"\"中的一个。(数据保证不会出现除0的情况)


输出描述:
输出一个整数,为上述表达式计算出的结果。
示例1

输入

2 * 4

输出

8
示例2

输入

5 / 4

输出

1
示例3

输入

3 + 23

输出

26

备注:
时间复杂度,额外空间复杂度

测试错误的数据
输入:363213591 * -850993220
结果:265850340

Python代码如下:

def add(x,y):
    while(y):
        temp=x^y
        y=(x&y)<<1
        x=temp
    return x

def negative(x):
    return add(~x,1)

def subtraction(x,y):
    if(x<y):
        y=negative(y)
        return add(x,y)
    elif(x==y):
        return 0
    else:
        x=negative(x)
        return negative(add(x,y))

def multiply(x,y):
    c=1 if(x^y<0) else 0
    x=negative(x) if(x<0) else x
    y=negative(y) if(y<0) else y
    temp=0
    while(y):
        if(y&1):
            temp=add(temp,x)
        x<<=1
        y>>=1
    temp=negative(temp) if(c) else temp
    return temp

def division(x,y):
    if(x==0 and y!=0):
        return 0
    c=1 if(x^y<0) else 0
    x=negative(x) if(x<0) else x
    y=negative(y) if(y<0) else y
    if(x<y and y!=0):
        return 0
    temp=0
    while(x>=y):
        trial=y
        t=1
        while((trial<<1)<=x and (trial<<1)>0):
            t<<=1
            trial<<=1
        temp=add(temp,t)
        x=subtraction(x,trial)
    temp=negative(temp) if(c) else temp
    return temp


ls=input().strip().split()
x=int(ls[0])
y=int(ls[2])
o=ls[1]
if '+' in o:
    print(add(x,y))
elif '-' in o:
    print(subtraction(x,y))
elif '*' in o:
    print(multiply(x,y))
elif '/' in o or '\\' in o:
    print(division(x,y))
编辑于 2019-11-08 00:44:46 回复(1)

问题信息

上传者:小小
难度:
1条回答 4163浏览

热门推荐

通过挑战的用户

查看代码