• 基本数字运算


    基本数字运算

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

    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

  • 相关阅读:
    【2017 Multi-University Training Contest
    【“玲珑杯”ACM比赛 Round #20 H】康娜的数学课
    【hdu 6181】Two Paths
    Cache coherence protocol
    C#实现图片的无损压缩
    收集一些常用的正则表达式
    收集一些常用的正则表达式
    收集一些常用的正则表达式
    Sql中存储过程的定义、修改和删除操作
    Sql中存储过程的定义、修改和删除操作
  • 原文地址:https://www.cnblogs.com/LQ6H/p/12940545.html
Copyright © 2020-2023  润新知