C++程序 找到给定数字旋转数字的最大值

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)

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

C++ 示例