生活随笔
收集整理的這篇文章主要介紹了
                                
基本数字运算
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
 
                                
                            
                            
                            基本數字運算
 
 
一.如何判斷一個自然數是否是某個數的平方
 
def isPower(n
):if n
<=0:print(n
+"不是自然數")return Falsei
=1while i
<n
:m
=i
*i
if m
==n
:return Trueelif m
>n
:return Falsei
+=1return Falseif __name__
=="__main__":n1
=15n2
=16if 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
=1high
=n
while low
<high
:mid
=int((low
+high
)/2)power
=mid
*mid
if power
>n
:high
=mid
-1elif power
<n
:low
=mid
+1else:return Truereturn Falseif __name__
=="__main__":n1
=15n2
=16if 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
=1while n
>0:n
=n
-minus
if n
==0:return Trueelif n
<0:return Falseelse:minus
+=2return Falseif __name__
=="__main__":n1
=15n2
=16if 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 Falsei
=1while i
<=n
:if i
==n
:return Truei
<<=1return Falseif __name__
=="__main__":n1
=8n2
=9if 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 Falsem
=n
&(n
-1)return m
==0if __name__
=="__main__":n1
=8n2
=9if 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
=0remain
=m
while m
>n
:m
-=nres
+=1remain
=m
print("商為:"+str(res
)+" 余數:"+str(remain
))if __name__
=="__main__":m
=14n
=4Divide
(m
,n
)
 
14 除以 4
商為:3 余數:2
 
 
2.移位法
 
 
五.如何根據已知隨機數生成函數計算新的隨機數
 
import random
def Rand7():return int(random
.uniform
(1,7))def Rand10():x
=0while True:x
=(Rand7
()-1)*7+Rand7
()if x
<=40:breakreturn x
%10+1if __name__
=="__main__":i
=0while 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
=0while 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
=0i
=1while True:if i
%2==0 or i
%3==0 or i
%5==0:count
+=1if count
==n
:breaki
+=1return 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*8bit
=[]for i 
in range(hexNum
):b
=n
>>ic
,d
=divmod(b
,2)bit
.append
(str(d
))return "".join
(bit
[::-1])def InttoHex(s
):hexs
=""remainder
=0while s
!=0:remainder
=s
%16if remainder
<10:hexs
=str(remainder
+int('0'))+hexs
else:hexs
=str(remainder
-10+ord('A'))+hexss
=s
>>4return chr(int(hexs
))if __name__
=="__main__":print("10的二進制輸出為:"+InttoBinary
(10))print("10的十六進制輸出為:"+InttoHex
(10))
 
10的二進制輸出為:0000000000000000000000000000000000000000000000000000000000001010
10的十六進制輸出為:A
 
 
十.如何求二進制數中1的個數
 
 
1.移位法
 
def CountOne(n
):count
=0while n
>0:if (n
&1)==1:count
+=1n
>>=1return count
if __name__
=="__main__":print(CountOne
(7))print(CountOne
(8))
 
3
1
 
 
2.與操作法
 
def CountOne(n
):count
=0while n
>0:if n
!=0:n
=n
&(n
-1)count
+=1return count
if __name__
=="__main__":print(CountOne
(7))print(CountOne
(8))
 
3
1
 
 
十一.如何找最小的不重復數
 
 
十二.如何計算一個數的n次方
 
 
1.蠻力法
 
def Power(d
,n
):if n
==0:return 1if n
==1:return dresult
=1if n
>0:i
=1while i
<=n
:result
*=di
+=1return result
else:i
=1while i
<=abs(n
):result
=result
/di
+=1return 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 1if n
==1:return dtmp
=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
=nlast_one
=1.0while new_one
-last_one
>e
:new_one
=(new_one
+last_one
)/2last_one
=n
/new_one
return new_one
if __name__
=="__main__":n
=50e
=0.000001print(str(n
) + "的平方根%.6f " %SquareRoot
(n
, e
))n
=4print(str(n
) + "的平方根%.6f " %SquareRoot
(n
, e
))
 
50的平方根7.071068 
4的平方根2.000000
 
 
十四.如何不使用^操作實現異或運算
 
class MyXor:def __init__(self
):self
.BITS
=32def xor(self
,x
,y
):res
=0i
=self
.BITS
-1while i
>=0:b1
=(x
&(1<<i
))>0b2
=(y
&(1<<i
))>0if b1
==b2
:xoreBit
=0else:xoreBit
=1res
<<=1res
|=xoreBiti
-=1return res
if __name__
=="__main__":x
=3y
=5mx
=MyXor
()print(mx
.xor
(x
,y
))
 
6
 
def Xor(x
,y
):return (x
|y
)&(~x
|~y
)if __name__
=="__main__":x
=3y
=5print(Xor
(x
,y
))
 
6
 
 
十五.如何不使用循環輸出1到100
                            總結
                            
                                以上是生活随笔為你收集整理的基本数字运算的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                            
                                如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。