任意自然数与11相乘求解:
思路:
任意自然数,如下四位数abcd, abcd * 11经过3步得出答案:
1. a b c d留足够空隙
2. 填值: a a+b b+c c+d d
3. 计算各个位结果>9,则进位
如: 998 * 11
第一步: 9 9 8
第二步: 9 9+9 9+8 8
第三步: 10 9 7 8
得出结果:10978为所求.
Python代码实现如下:
import copy
def mutiply11(n):
lenNum = len(n)
totalBit = lenNum + 1
stepInNum = [0] * totalBit
eachBit = [0] * totalBit
for i in range(totalBit):
if 0<i<lenNum:
thisBit = int(n[i-1]) + int(n[i])
if thisBit > 9:
stepInNum[i] = thisBit // 10
thisBit %= 10
else:
ti = i
if i > 0:
ti = lenNum - 1
thisBit = int(n[ti])
eachBit[i] = thisBit
print "eachBit : ",eachBit
print "stepInNum : ",stepInNum
eachBit.reverse()
stepInNum.reverse()
for p in range(1,totalBit):
temp = eachBit[p] + stepInNum[p-1]
if temp > 9 and p != totalBit - 1:
stepInNum[p] += temp // 10
temp %= 10
eachBit[p] = temp
eachBit.reverse()
stepInNum.reverse()
result = ''.join(str(e) for e in eachBit)
print '你输入的数字乘以11的结果是:',result
while(True):
num = raw_input('Enter your num: ')
if num == '886':
print '再见'
break
mutiply11(num)