實際公里數
解題思路:假設顯示的是四位num:
1.千位:num//1000得到整除後的商K;由於每10一輪循環出現1個4;所以在對商K對10取模結果爲n,如果餘數大於4,那麼n需要加1;小於4則n不需要加1;所以千位最後需要減去:n*1000
其他位置的數字也這樣判斷
2.算出來後需要用num - n*1000 的結果來計算百位上面應該減多少
'''
有一個車的里程錶是以整數方式顯示的,但是有個毛病,每到4時會直接跳至5,例如3後面本應該顯示4,但是直接顯示爲5。
那麼當顯示爲13公里的時候,實際上是12公里。(因爲4被跳了。)
而當顯示爲15公里的時候,實際上是13公里。(因爲4和14被跳了。)
現在請給出一個函數,當輸入顯示公里數時,返回實際公里數。
'''
'''
'''
def assert_equals(func,target):
if func == target:
print("Success!")
else:
print('Fail! {0} not equals {1}'.format(func, target))
def faulty_odometer(num):
num1 = num
list = []
while num%10>=0 and num !=0:
list.append(num%10)
num = num//10
# 按照從高位到地位的方式千百十個位的順序存儲
list.reverse()
len1 = len(list)-1
for i in list:
temp = 10**len1
k = num1 // temp
n = k // 10
if k % 10 > 4:
n = n + 1
num1 = num1 - n*temp
len1 = len1-1
return num1
assert_equals(faulty_odometer(13),12)
assert_equals(faulty_odometer(15),13)
assert_equals(faulty_odometer(55),40)
assert_equals(faulty_odometer(2005),1462)
assert_equals(faulty_odometer(1500),1053)
assert_equals(faulty_odometer(999999),531440)
assert_equals(faulty_odometer(165826622),69517865)
結果:
Success!
Success!
Success!
Success!
Success!
Success!
Success!
題目來自:
https://fishc.com.cn/forum.php?mod=viewthread&tid=86360&ctid=588