C++程序 旋转给定数字的K位数字
给定两个整数 N 和 K ,任务是将 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)