python對字串實現四則運算

2021-07-05 06:21:29 字數 2750 閱讀 5644

華電北風吹

天津大學認知計算與應用重點實驗室

日期:2015/9/12

根據小學學的四則元演算法則,對輸入的字串實現比較大小,加法,減法,乘法,除法和求餘等運算。

__author__ = 'zhengyi'

class

stringarithmetic:

# class condition: x,y are both non-negative

# compare x and y, if x>y retuen 1,x==y return 0, xdef

compare

(self,x,y):

m=len(x)

n=len(y)

if m>n:

return

1if mreturn -1

for i in range(m):

if x[i]>y[i]:

return

1if x[i]return -1

return

0def

add(self,x,y):

result=''

rise=0

maxlen=max(len(x),len(y))

x=x.zfill(maxlen)

y=y.zfill(maxlen)

for i in range(1,maxlen+1):

temp=int(x[-i])+int(y[-i])+rise

if temp>9:

rise=1

temp=temp-10

else:

rise=0

result+=str(temp)

if rise>0:

result+=str(rise)

return result[::-1]

# condition x>=y, resurn x-y

defminus

(self,x,y):

result=''

own=0

for i in range(1,len(y)+1):

first=int(x[-i])-own

second=int(y[-i])

if first1

first+=10

else:

own=0

result+=str(first-second)

result=result.rstrip('0')

if result=='':

result='0'

return result[::-1]

# condition: return k times of x, limit k to stop temp over limit

defsiglemultiple

(self,k,x):

result=''

rise=0

k=int(k)

for i in range(1,len(x)+1):

temp=int(x[-i])*k+rise

result+=str(temp%10)

rise=temp//10

result=result[::-1]

if rise>0:

result=str(rise)+result

return result

# return x*y

defmultiple

(self,x,y):

if len(x)'0'

zright=''

for i in range(1,len(y)+1):

temp=self.siglemultiple(y[-i],x)+zright

result=self.add(result,temp)

zright+='0'

return result

# x=ky+b, return k+' '+b

defrecount

(self,x,y):

m=len(x)

n=len(y)

s=n-1

k=''

b=x[0:s]

for i in range(s,m):

b+=x[i]

temp=self.singlerecount(b,y)

k+=temp[0]

b=temp[1]

if len(k)==0:

k='0'

return k,b

# x=ky+b, return k,b by loop. faster for k is smaller

defsinglerecount

(self,x,y):

k=0while

true:

temp=self.siglemultiple(k,y)

i=self.compare(x,temp)

if i==1:

k+=1

continue

if i==0:

return str(k),'0'

if i==-1:

break

temp=self.minus(x,self.siglemultiple(k-1,y))

return str(k-1),temp

s=stringarithmetic()

x='123'

y='321'

result=s.multiple(x,y)

print(result)

字串 四則運算

題目大意 有字串表示的乙個四則運算表示式,要求計算出該表示式的正確數值。四則運算即 加減乘除 另外該表示式中的數字只能是1位 數值範圍0 9 另若有不能整除的情況,按向下取整處理,eg 8 3得出值為2。若有字串 8 7 2 9 3 計算出其值為19。2012年華為上機的乙個題目 題目思路 建立棧分...

字串的四則運算

public string addstrings string num1,string num2 if b 0 tmp 10 return sb.reverse tostring 題目二 字串相減 給定兩個字串形式的非負整數 num1 和num2 計算它們的差。預設num1比num2大 注 不能使用...

字串的四則運算

四則運算,最常用的當然是逆波蘭方法,現將表示式由中綴表示式轉化為字尾表示式,然後再使用棧計算即可。這兩步下來,估計沒有三四百行 是實現不了的。中綴表示式轉字首字尾表示式 將中綴表示式轉換為字尾表示式的演算法思想 數字時,加入字尾表示式 運算子 a.若為 入棧 b.若為 則依次把棧中的的運算子加入字尾...