题目描述
给定一个整数 N N N,请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零(参见样例 2)。
输入格式
一个整数 N N N。
输出格式
一个整数,表示反转后的新数。
输入输出样例
输入
123
输出
321
说明/提示
【数据范围】
-1,000,000,000\\leq N\\leq 1,000,000,000 。
方式-根据表达式计算
代码
python
class Solution:
@staticmethod
def oi_input():
"""从标准输入读取数据"""
num = int(input())
return num
@staticmethod
def oi_test():
"""提供测试数据"""
return 6
@staticmethod
def solution(num):
'''根据表达式计算值 大范围可能会有精度问题'''
from math import sqrt
sqrt5 = sqrt(5)
left = (1 + sqrt5) / 2
right = (1 - sqrt5) / 2
fn = (left ** num - right ** num) / sqrt5
print("{0:.2f}".format(fn))
oi_input = Solution.oi_input
oi_test = Solution.oi_test
solution = Solution.solution
if __name__ == '__main__':
num = oi_test()
# num = oi_input()
solution(num)
流程图
开始 读取输入num 计算sqrt(5), 黄金分割比例 计算左项 (1+√5)/2 的num次方 计算右项 (1-√5)/2 的num次方 (左项 - 右项)/sqrt(5) 格式化为两位小数输出 结束
方式-记忆化递归
代码
python
class Solution:
@staticmethod
def oi_input():
"""从标准输入读取数据"""
num = int(input())
return num
@staticmethod
def oi_test():
"""提供测试数据"""
return 6
@staticmethod
def solution(num):
'''记忆化递归'''
from functools import lru_cache
@lru_cache(maxsize=None) # 使用缓存装饰器,避免重复计算
def fibonacci(num):
if num == 0:
return 0
elif num == 1:
return 1
return fibonacci(num - 1) + fibonacci(num - 2)
result = fibonacci(num)
print("{0:.2f}".format(result))
oi_input = Solution.oi_input
oi_test = Solution.oi_test
solution = Solution.solution
if __name__ == '__main__':
num = oi_test()
# num = oi_input()
solution(num)
流程图
是 否 是 否 开始 输入num num是否为0? result = 0 num是否为1? result = 1 初始化a=0, b=1 循环2到num a, b = b, a+b 更新后b的值 循环结束 result = b 格式化输出两位小数 结束