Algorithm 向左旋转

Algorithm 向左旋转,algorithm,integer,Algorithm,Integer,我有一个整数。 假设n=25314; 我想将整数(n)左侧的数字旋转n次。 对于例如int=25314和3次向左旋转,结果是int=14253 int=32546,向左旋转4次。所以,结果是int=63254 如何在C++中用n次旋转整数左? ,可以将整数转换为字符串。从字符串的开头到n执行一个子字符串,从n+1执行一个子字符串到字符串的结尾。首先将右块和第二个左块连接在一起。然后将字符串转换回整数。您可以将整数转换成字符串。从字符串的开头到n执行一个子字符串,从n+1执行一个子字符串到字符串的

我有一个整数。 假设n=25314; 我想将整数(n)左侧的数字旋转n次。
对于例如int=25314和3次向左旋转,结果是int=14253
int=32546,向左旋转4次。所以,结果是int=63254

如何在C++中用n次旋转整数左?

,可以将整数转换为字符串。从字符串的开头到n执行一个子字符串,从n+1执行一个子字符串到字符串的结尾。首先将右块和第二个左块连接在一起。然后将字符串转换回整数。

您可以将整数转换成字符串。从字符串的开头到n执行一个子字符串,从n+1执行一个子字符串到字符串的结尾。首先将右块和第二个左块连接在一起。然后将字符串转换回整数。

1234567/1000=1234,余数为567。 然后按相反的顺序把它们放回一起。 你需要计算x,它是比d高10的幂。 (这就是循环。)

int n=1234567;
int p=(int)pow(10,3);//如果你想旋转3位数
int d=n/p;//=1234
int r=n-d*p;//=567
int x=1;

而(x1234567/1000=1234,剩余567。 然后按相反的顺序把它们放回一起。 你需要计算x,它是比d高10的幂。 (这就是循环。)

int n=1234567;
int p=(int)pow(10,3);//如果要旋转3位数
int d=n/p;//=1234
int r=n-d*p;//=567
int x=1;

(x对于一个N位数的整数,你想把它向左旋转M次,最简单的方法是做一个模运算M%N,这将给你每个位数的最后移位

例如,在您的问题中,您希望将32546向左旋转4位,4%5是4,因此每个数字需要向左旋转4位

编号:32546,数字:5,旋转计数:4,每个数字的移位:4%5=4

number:  original position   final position
  3              4            (4+4)%5 = 3
  2              3            (3+4)%5 = 2
  5              2            (2+4)%5 = 1
  4              1            (1+4)%5 = 0
  6              0            (0+4)%5 = 4
因此,最终结果是:63254

对于非常大的整数,您可以将整数转换为字符串,进行旋转并重新更改。但是,对于这种情况,您可以这样做:

int result = 32645;
for(int i=0; i<4; ++i)
    result *= 10;          // this is to rotate left 4 digits 
int right = 32546;
for(int i=0; i<5-4; ++i)
    right /= 10;           // get the number to be appended to the right;
result += right;
result %= 100000;         // get the final 5 digit result;
int结果=32645;

对于(int i=0;i的N位整数,如果要将其向左旋转M次,最简单的方法是执行模块化操作M%N,这将给出每个数字的最终移位

例如,在您的问题中,您希望将32546向左旋转4位,4%5是4,因此每个数字需要向左旋转4位

编号:32546,数字:5,旋转计数:4,每个数字的移位:4%5=4

number:  original position   final position
  3              4            (4+4)%5 = 3
  2              3            (3+4)%5 = 2
  5              2            (2+4)%5 = 1
  4              1            (1+4)%5 = 0
  6              0            (0+4)%5 = 4
因此,最终结果是:63254

对于非常大的整数,您可以将整数转换为字符串,进行旋转并重新更改。但是,对于这种情况,您可以这样做:

int result = 32645;
for(int i=0; i<4; ++i)
    result *= 10;          // this is to rotate left 4 digits 
int right = 32546;
for(int i=0; i<5-4; ++i)
    right /= 10;           // get the number to be appended to the right;
result += right;
result %= 100000;         // get the final 5 digit result;
int结果=32645;

对于(int i=0;还有执行子块步骤的
std::rotate
算法:还有执行子块步骤的
std::rotate
算法:@Moo:i应该是werkin'@Moo:i应该是werkin'