TA的每日心情 | 奋斗 2022-2-8 01:13 |
---|
签到天数: 171 天 [LV.7]分神
|
不考虑借位的意思是不用考虑借位的不同情况,不是不借位,呵呵,写得着急了点.
编这种小程序也就是一两分钟的事儿,当时原本正在编其他的程序,随手就写了,这也是为什么我喜欢python的原因.
程序是为了比较方便地验证算法,省得还得自己算,10个还容易,成百上千的验算就不容易了,好处是可以一劳永逸地把所有的数都验证了,而不仅仅局限于这10个,总的来说还是程序更方便啊.
你可能想多了,用这种递进似算法不会出现借2位的情况阿,因为后一个与前一个只差一个数位.
我刚刚用我的算法程序遍历了所有的可能的数,全部都计算正确了.(程序见下面)
=======================遍历程序=====================
def multiply8889(digits):
A,B,C,D = int(digits[0]),int(digits[1]),int(digits[2]),int(digits[3])
if D!= 0:
d = 10-D
c = D-C-1
else:
d = 0
c = -C
if c <0:
c = c+10
b = C-B-1
else:
b = C-B
if b <0:
b = b+10
a = B-A-1
else:
a = B-A
if a<0:
a = a+10
number = a*1000+b*100+c*10+d
return number
def check(digits):
number = multiply8889(digits)
if digits != str(8889*number)[-4:]: # last four digits
return False
else:
return True
def print_result(digits):
number = multiply8889(digits)
print 'answer:'+digits+'=>'+str(number)
print 'check:'+'8889''*'+str(number)+'='+str(8889*number)
anywrong = False
for i0 in range(1,10):
for i1 in range(10):
for i2 in range(10):
for i3 in range(10):
digits = str(i0)+str(i1)+str(i2)+str(i3)
if not check(digits):
anywrong = True
break
if not anywrong:
print "The algorithm is correct!"
else:
print "The algorithm is incorrect!"
print_result('1111')
=======================最后结果=========================
The algorithm is correct!
answer:1111=>9999
check:8889*9999=88881111 |
|