C++程序 找到给定数字旋转数字的最大值
给定一个正整数 N ,任务是在所有数字的旋转数中找到最大值 N 。
示例:
输入: N = 657
输出: 765
解释: 657的所有旋转为 {657, 576, 765}。 在所有这些旋转中,最大值是765。
输入: N = 7092
输出: 9270
解释:
7092的所有旋转为 {7092, 2709, 9270, 0927} 。 在所有这些旋转中,最大值是9270。
过程: 想法是找到数字 N 的所有旋转并打印所有生成的数字中的最大值。按照以下步骤解决问题:
- 计算数字 N 中出现的数字的位数,即log10N的上限。
- 初始化一个变量 ans ,其值为 N ,用于存储生成的结果最大数字。
- 迭代范围 **[1,log 10(N) – 1] **并执行以下步骤:
- 更新 N 的值为下一个旋转值。
- 现在,如果下一个旋转生成的超出 ans ,则使用 N 的旋转值更新 ans
- 完成上述步骤之后,请将 ans 的值作为所需答案打印出来。
以下是上述方法的实现:
//用于上面的C ++程序
#include < bits/stdc++.h>
using namespace std;
//函数查找所有数字的旋转可能产生的最大值
void findLargestRotation(int num)
{
//存储所需结果
int ans = num;
//存储数字的位数
int len = floor(log10(num) +1);
int x = pow(10, len -1);
//迭代范围[1,len-1]
for (int i = 1; i < len; i++) {
//存储数字的单位数
int lastDigit = num % 10;
//存储剩余的数字
num = num / 10;
//找到下一个旋转
num + =(lastDigit * x);
//如果当前旋转超过了整体答案,则更新答案
if(num> ans) {
ans = num;
}
}
//打印结果
cout << ans;
}
//驱动器代码
int main()
{
int N = 657;
findLargestRotation(N);
return 0;
}
输出:
765
时间复杂度: O(log10N)
辅助空间: O(1)