C++程序 生成数字的所有循环

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)

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

C++ 示例