華電北風吹
天津大學認知計算與應用重點實驗室
日期: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.若為 則依次把棧中的的運算子加入字尾...