字符串转整数触发ValueError,如何优化整除10判断逻辑?
解决方案
错误原因
你的代码将所有数字的最后一位拼接成字符串后转为整数,但当数组长度极大时(比如测试用例中N=82051),拼接后的字符串长度超过Python默认的整数字符串转换限制(4300位),执行int(c)时触发ValueError。
优化思路
判断一个数能否被10整除,只需要看它的最后一位是否为0。而你拼接出来的数的最后一位,就是原数组最后一个元素的最后一位。完全不需要拼接所有字符并转换为大整数,直接检查最后一个元素的最后一位即可,既高效又避免了长度限制问题。
修正后的代码
N = int(input()) A = input().split() # 直接检查数组最后一个元素的最后一位是否为'0' if A[-1][-1] == '0': print("Yes") else: print("No")
补充说明
如果一定要保留拼接逻辑(不推荐),可以修改Python的整数转换长度限制,但这属于冗余操作:
import sys # 解除长度限制,设为0表示无限制 sys.set_int_max_str_digits(0) N = int(input()) A = input().split() a = [i[-1] for i in A] c = "".join(a) d = int(c) print("Yes" if d % 10 == 0 else "No")
但显然第一种方法更高效,时间复杂度从O(N)降到O(1),且避免了不必要的内存占用。
内容的提问来源于stack exchange,提问作者Nishchal Gupta
相关产品推荐
相关产品推荐

