基本数字运算

基本数字运算

一.如何判断一个自然数是否是某个数的平方

def isPower(n):
    if n<=0:
        print(n+"不是自然数")
        return False

    i=1
    while i<n:
        m=i*i
        if m==n:
            return True
        elif m>n:
            return False
        i+=1
    return False

if __name__=="__main__":
    n1=15
    n2=16
    if isPower(n1):
        print(str(n1)+"是某个自然数的平方")
    else:
        print(str(n1)+"不是某个自然数的平方")

    if isPower(n2):
        print(str(n2)+"是某个自然数的平方")
    else:
        print(str(n2)+"不是某个自然数的平方")
15不是某个自然数的平方
16是某个自然数的平方

2.二分查找法

def isPower(n):
    low=1
    high=n
    while low<high:
        mid=int((low+high)/2)
        power=mid*mid
        if power>n:
            high=mid-1
        elif power<n:
            low=mid+1
        else:
            return True
    return False


if __name__=="__main__":
    n1=15
    n2=16
    if isPower(n1):
        print(str(n1)+"是某个自然数的平方")
    else:
        print(str(n1)+"不是某个自然数的平方")

    if isPower(n2):
        print(str(n2)+"是某个自然数的平方")
    else:
        print(str(n2)+"不是某个自然数的平方")
15不是某个自然数的平方
16是某个自然数的平方

3.减法运算法

def isPower(n):
    minus=1
    while n>0:
        n=n-minus
        if n==0:
            return True
        elif n<0:
            return False
        else:
            minus+=2
    return False


if __name__=="__main__":
    n1=15
    n2=16
    if isPower(n1):
        print(str(n1)+"是某个自然数的平方")
    else:
        print(str(n1)+"不是某个自然数的平方")

    if isPower(n2):
        print(str(n2)+"是某个自然数的平方")
    else:
        print(str(n2)+"不是某个自然数的平方")
15不是某个自然数的平方
16是某个自然数的平方

二.如何判断一个数是否为2的n次方

1.构造法

def isPower(n):
    if n<1:
        return False

    i=1
    while i<=n:
        if i==n:
            return True
        i<<=1
    return False


if __name__=="__main__":
    n1=8
    n2=9
    if isPower(n1):
        print(str(n1)+"能表示成2的n次方")
    else:
        print(str(n1)+"不能表示成2的n次方")

    if isPower(n2):
        print(str(n2)+"能表示成2的n次方")
    else:
        print(str(n2)+"不能表示成2的n次方")
8能表示成2的n次方
9不能表示成2的n次方

2.与操作法

def isPower(n):
    if n<1:
        return False
    m=n&(n-1)
    return m==0


if __name__=="__main__":
    n1=8
    n2=9
    if isPower(n1):
        print(str(n1)+"能表示成2的n次方")
    else:
        print(str(n1)+"不能表示成2的n次方")

    if isPower(n2):
        print(str(n2)+"能表示成2的n次方")
    else:
        print(str(n2)+"不能表示成2的n次方")
8能表示成2的n次方
9不能表示成2的n次方

三.如何不使用除法操作实现两个正整数的除法

1.减法

def Divide(m,n):
    print(str(m)+" 除以 "+str(n))

    res=0
    remain=m
    while m>n:
        m-=n
        res+=1
    remain=m
    print("商为:"+str(res)+" 余数:"+str(remain))


if __name__=="__main__":
    m=14
    n=4
    Divide(m,n)
14 除以 4
商为:3 余数:2

2.移位法

五.如何根据已知随机数生成函数计算新的随机数

import random

def Rand7():
    return int(random.uniform(1,7))

def Rand10():
    x=0
    while True:
        x=(Rand7()-1)*7+Rand7()
        if x<=40:
            break
    return x%10+1


if __name__=="__main__":
    i=0
    while i!=10:
        print(Rand10(),end=" ")
        i+=1
1 9 6 5 1 3 6 2 6 9

六.如何判断1024!末尾有多少个0

1.蛮力法

2.因子法

def ZeroCount(n):
    count=0

    while n>0:
        n=int(n/5)
        count+=n
    return count

if __name__=="__main__":
    print("1024!末尾0的个数为:"+str(ZeroCount(1024)))
1024!末尾0的个数为:253

七.如何按要求比较两个数的大小

def Maxs(a,b):
    return int(((a+b)+abs(a-b))/2)

if __name__=="__main__":
    print(Maxs(5,6))
6

八.如何求有序数列的第1500个数的值

1.蛮力法

def Search(n):
    count=0
    i=1
    while True:
        if i%2==0 or i%3==0 or i%5==0:
            count+=1

        if count==n:
            break
        i+=1
    return i



if __name__=="__main__":
    print(Search(1500))
2045

2.数字规律法

def Search(n):
    a=[0,2,3,4,5,6,8,9,10,12,14,15,16,18,20,21,22,24,25,26,27,28,30]
    ret=int((n/22))*30+a[n%22]
    return ret


if __name__=="__main__":
    print(Search(1500))
2045

九.如何把十进制数(long 型)分别以二进制和十六进制形式输出

def InttoBinary(n):
    hexNum=8*8
    bit=[]

    for i in range(hexNum):
        b=n>>i
        c,d=divmod(b,2)
        bit.append(str(d))
    return "".join(bit[::-1])

def InttoHex(s):
    hexs=""
    remainder=0

    while s!=0:
        remainder=s%16
        if remainder<10:
            hexs=str(remainder+int('0'))+hexs
        else:
            hexs=str(remainder-10+ord('A'))+hexs
        s=s>>4

    return chr(int(hexs))


if __name__=="__main__":
    print("10的二进制输出为:"+InttoBinary(10))
    print("10的十六进制输出为:"+InttoHex(10))
10的二进制输出为:0000000000000000000000000000000000000000000000000000000000001010
10的十六进制输出为:A

十.如何求二进制数中1的个数

1.移位法

def CountOne(n):
    count=0

    while n>0:
        if (n&1)==1:
            count+=1
        n>>=1
    return count

if __name__=="__main__":
    print(CountOne(7))
    print(CountOne(8))
3
1

2.与操作法

def CountOne(n):
    count=0

    while n>0:
        if n!=0:
            n=n&(n-1)
        count+=1
    return count

if __name__=="__main__":
    print(CountOne(7))
    print(CountOne(8))
3
1

十一.如何找最小的不重复数

十二.如何计算一个数的n次方

1.蛮力法

def Power(d,n):
    if n==0:
        return 1

    if n==1:
        return d

    result=1
    if n>0:
        i=1
        while i<=n:
            result*=d
            i+=1
        return result
    else:
        i=1
        while i<=abs(n):
            result=result/d
            i+=1
    return result


if __name__=="__main__":
    print(Power(2,3))
    print(Power(-2,3))
    print(Power(2,-3))
8
-8
0.125

2.递归法

def Power(d,n):
    if n==0:
        return 1

    if n==1:
        return d

    tmp=Power(d,int(abs(n)/2))

    if n>0:
        if n%2==1:
            return tmp*tmp*d
        else:
            return tmp*tmp

    else:
        if n%2==1:
            return 1/(tmp*tmp*d)
        else:
            return 1/(tmp*tmp)


if __name__=="__main__":
    print(Power(2,3))
    print(Power(-2,3))
    print(Power(2,-3))
8
-8
0.125

十三.如何在不能使用库函数的条件下计算n的平方根

def SquareRoot(n,e):
    new_one=n
    last_one=1.0

    while new_one-last_one>e:
        new_one=(new_one+last_one)/2
        last_one=n/new_one

    return new_one


if __name__=="__main__":
    n=50
    e=0.000001
    print(str(n) + "的平方根%.6f " %SquareRoot(n, e))
    n=4
    print(str(n) + "的平方根%.6f " %SquareRoot(n, e))
50的平方根7.071068 
4的平方根2.000000

十四.如何不使用^操作实现异或运算

class MyXor:
    def __init__(self):
        self.BITS=32

    def xor(self,x,y):
        res=0
        i=self.BITS-1

        while i>=0:
            b1=(x&(1<<i))>0
            b2=(y&(1<<i))>0

            if b1==b2:
                xoreBit=0
            else:
                xoreBit=1

            res<<=1
            res|=xoreBit
            i-=1

        return res

if __name__=="__main__":
    x=3
    y=5
    mx=MyXor()
    print(mx.xor(x,y))
6
def Xor(x,y):
    return (x|y)&(~x|~y)


if __name__=="__main__":
    x=3
    y=5
    print(Xor(x,y))
6

十五.如何不使用循环输出1到100

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值