C++程序 旋转给定数字的K位数字

C++程序 旋转给定数字的K位数字

给定两个整数 NK ,任务是将 N 的数字旋转K个位置。如果 K 是正整数,则左旋其数字。否则,右旋其数字。

示例:

输入: N = 12345,K = 2

输出: 34512

说明:

将 N(= 12345)左旋 K(= 2)改为 34512。

因此,所需的输出是 34512。

输入: N = 12345,K = -3

输出: 34512

说明:

将 N(= 12345)右旋 K(= -3) 修改为 34512。

因此,所需的输出是 34512。

方法: 按照以下步骤解决问题:

  • 初始化一个变量,比如说 X ,来存储 N 中数字的个数。
  • 更新 K = (K + X) % X ,将其缩小到左旋的情况下。
  • 移除 N 的前 K 个数字,并将所有移除的数字附加到 N 的数字右侧。
  • 最后,打印 N 的值。

以下是上述方法的实现:

// C++程序实现
// 以上方法
  
#include <bits/stdc++.h>
using namespace std;
  
// 查找 N 中数字的个数
int numberOfDigit(int N)
{
  
    // 存储 N 中数字的个数
    int digit = 0;
  
    // 计算 N 中的数字个数
    while (N > 0) {
  
        // 更新 digit
        digit++;
  
        // 更新 N
        N /= 10;
    }
    return digit;
}
  
// 将 N 的数字旋转 K 个位置
void rotateNumberByK(int N, int K)
{
  
    // 存储 N 中数字的个数
    int X = numberOfDigit(N);
  
    // 更新 K,仅需要处理左旋
    K = ((K % X) + X) % X;
  
    // 存储 N 的前 K 个数字
    int left_no = N / (int)(pow(10, X - K));
  
    // 移除 N 的前 K 个数字
    N = N % (int)(pow(10, X - K));
  
    // 存储left_no中数字的个数
    int left_digit = numberOfDigit(left_no);
  
    // 将left_no附加到N数字的右侧
    N = (N * (int)(pow(10, left_digit))) + left_no;
    cout << N;
}
  
// 主函数
int main()
{
    int N = 12345,K = 7;
   
    // 调用函数
    rotateNumberByK(N,K);
    return 0;
}
  
// Dharanendra L V 提供的代码```  

输出:

34512

时间复杂度: O(log N)

辅助空间: O(1)

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

C++ 示例