从高位开始扫描,遇到奇数x时,可以采取两种措施:
- x = x-1,此时新数字小于原数字,为了按键次数最少,新数字要尽可能大。当x后的数字都取8时,新数字最大。
- x = x+1,此时新数字小于原数字,为了按键次数最少,新数字要尽可能小。当x后的数字都取0时,新数字最小。
需要注意的是,当x=9进行+1操作时,会产生进位,还有可能导致高位的进一步进位。不过在这种情况下,操作数必然会大于进行-1操作,所以特判一下即可。
import math
if __name__ == '__main__':
T = int(input())
for Case in range(1, T+1):
s = input()
num = int(s)
res = 0
for i in range(len(s)):
if (ord(s[i])-ord('0')) % 2 == 1:
if (s[i]=='9'):
s = s[0:i] + '8' + '8'*(len(s)-i-1)
res = num - int(s)
break
s = s[0:i] + chr(ord(s[i])-1) + '8'*(len(s)-i-1)
num1 = int(s)
s = s[0:i] + chr(ord(s[i])+2) + '0'*(len(s)-i-1)
num2 = int(s)
# print("nums: ", num1, num2);
res = min(num-num1, num2-num)
break
print("Case #{}: {}".format(Case, int(res)))