C++程序 生成数字的所有循环
给定一个整数 n ,任务是生成所有可能的左移数字。左移数字是指当数字的所有位向左移动一个位置且第一个位的数字移动到最后一个时生成的数字。
例子:
输入: n = 123
输出: 231 312
输入: n = 1445
输出: 4451 4514 5144
方法:
- 假设 n = 123 。
- 将 n 乘以 10 ,即 n = n * 10 = 1230 。
- 将第一个数字加到结果数字中,即 1230 + 1 = 1231 。
- 从结果数字中减去 (第一个数字) * 10^k ,其中 k 是原始数字中的位数(在这种情况下,k=3)。
- 1231 – 1000 = 231 是原始数字的左移数字。
以下是上述方法的实现代码:
// C++ implementation of the approach
#include <bits/stdc++.h>
using namespace std;
// Function to return the count of digits of n
int numberOfDigits(int n)
{
int cnt = 0;
while (n > 0) {
cnt++;
n /= 10;
}
return cnt;
}
// Function to print the left shift numbers
void cal(int num)
{
int digits = numberOfDigits(num);
int powTen = pow(10, digits - 1);
for (int i = 0; i < digits - 1; i++) {
int firstDigit = num / powTen;
// Formula to calculate left shift
// from previous number
int left
= ((num * 10) + firstDigit)
- (firstDigit * powTen * 10);
cout << left << " ";
// Update the original number
num = left;
}
}
// Driver Code
int main()
{
int num = 1445;
cal(num);
return 0;
}
输出:
4451 4514 5144
时间复杂度: O(log 10 (num))
辅助空间: O(1)