【牛客刷题】实现返回最大的不大于n的完美数的函数
文章目录
- 一、题目介绍
- 1.1 题目描述
- 1.2 输入描述
- 1.3 输出描述
- 1.4 示例
- 二、解题思路
- 2.1 核心算法设计
- 2.2 性能优化关键
- 2.3 算法流程图
- 三、解法实现
- 3.1 解法一:借位+贪心
- 3.1.1 初级版本分析
- 3.2 解法二:优化版(推荐)
- 3.2.1 优化版本分析
- 四、总结与拓展
- 4.1 关键优化技术
- 4.2 进阶优化方向
- 4.3 应用场景扩展
一、题目介绍
1.1 题目描述
给定一个正整数n,定义一个完美数为每一位数字只包含1、2、3的十进制数。设计一个函数f(n),返回最大的不超过n的完美数。
1.2 输入描述
- 第一行:测试用例数T(1 ≤ T ≤ 10)
- 接下来T行:每行一个正整数n(1 ≤ n ≤ 10¹⁸)
1.3 输出描述
对于每个测试用例,输出f(n)的值
1.4 示例
输入
4
213
3244
22
100
输出
213
3233
22
33
说明
- f(213)=213(213本身就是完美数)
- f(3244)=3233(3233是最大的不超过3244的完美数)
- f(22)=22(22是完美数)
- f(100)=33&