C++程序 旋转给定数字的K位数字
旋转数字可以指将数字的某些位数从左边移动到右边,或从右边移动到左边,或者对数字的某些位数进行交换。在本篇文章中,我们将介绍如何编写C ++程序来旋转给定数字的K位数字。
算法原理
该算法的基本原理是将数字视为字符串,然后通过移动或交换字符来旋转数字。具体实现步骤如下:
- 将数字转换为字符串形式。
- 判断旋转方向:左移或右移。
- 如果是左移,则将字符串的左半部分(即前K个字符)移到字符串的末尾;如果是右移,则将字符串的右半部分(即后K个字符)移到字符串的开头。
- 将字符串再次转换为数字,输出结果。
下面是一个实现示例:
#include <iostream>
#include <string>
// 将数字转换为字符串
std::string intToStr(int num) {
std::string str = std::to_string(num);
return str;
}
// 将字符串转换为数字
int strToInt(std::string str) {
int num = std::stoi(str);
return num;
}
// 旋转字符串
std::string rotateStr(std::string str, int k, char direction) {
int len = str.length();
std::string rotatedStr;
if (direction == 'l') { // 左移
rotatedStr = str.substr(k, len) + str.substr(0, k);
} else if (direction == 'r') { // 右移
rotatedStr = str.substr(len - k, k) + str.substr(0, len - k);
}
return rotatedStr;
}
// 旋转数字
int rotateNum(int num, int k, char direction) {
std::string str = intToStr(num);
std::string rotatedStr = rotateStr(str, k, direction);
int rotatedNum = strToInt(rotatedStr);
return rotatedNum;
}
int main() {
int num = 12345;
int k = 2;
char direction = 'l';
int rotatedNum = rotateNum(num, k, direction);
std::cout << rotatedNum << std::endl;
return 0;
}
在这个示例中,我们将数字12345旋转2位向左移动,输出结果为34512。
算法分析
该算法的时间复杂度为O(n),其中n是数字的位数。在字符串转换和数字转换方面,我们使用了C ++标准库中的to_string()和stoi()函数。
结论
通过使用C ++程序,我们可以轻松地旋转数字的任意位数。您可以通过更改示例代码中的数字,位数和旋转方向来测试该算法。