# 2^63=9223372036854775808 # sys.maxsize=2^63 # 防止数值越界 whileTrue: if num.isdigit(): num = int(num) if num <= sys.maxsize: break num = input("非法输入,请重试:")
max_index = 1 for i inrange(0,63): if num < pow(2,i): max_index = i-1 #print(max_index) break
result = '' temp = num for index inrange(max_index,-1,-1): if temp >= pow(2,index): result = result + '1' temp = abs(temp - pow(2, index)) else: result = result + '0'
# 输入 definput_num(): num = input("十进制转二进制凑数法整数部分实现\n请输入十进制整数:") whileTrue: if num.isdigit(): num = int(num) if num <= sys.maxsize: break num = input("非法输入,请重试:") return num
# 凑数法 defcomparison_method(num): max_index = 1 for i inrange(0,63): if num < pow(2,i): max_index = i-1 break result = '' temp = num for index inrange(max_index,-1,-1): if temp >= pow(2,index): result = result + '1' temp = abs(temp - pow(2, index)) else: result = result + '0' return result
# 除2取余 defdivision_method(num): result = '' temp = num while temp>0: result = str(temp % 2) + result temp = int(temp / 2) return result
if __name__ == '__main__': num = input_num() start = time.perf_counter() result1 = comparison_method(num) middle = time.perf_counter() result2 = division_method(num) end = time.perf_counter() print(num,"凑数法结果为:",result1,"用时:",str(middle-start)) print(num,"除2取余法结果为:",result2,"用时:",str(end-middle))