我有一个整数。
假设n = 25314;
我想旋转整数(n)左侧的数字n次。
For ex. int=25314 and 3 time rotate left side .so, result is int=14253
int =32546 and 4 time rotate left side .So, result is int=63254
如何在c ++中用n次旋转整数左侧?
答案 0 :(得分:4)
1234567/1000 = 1234,其余为567。 然后按相反的顺序将它们放回原处。 你需要计算x,即高于d的10的幂。 (这就是循环。)
int n = 1234567;
int p = (int)pow(10, 3); // if you want to rotate by 3 digits
int d = n / p; // = 1234
int r = n - d * p; // = 567
int x = 1;
while(x <= d) x *= 10; // = 10000
int result = r * x + d; // = 5670000 + 1234 = 5671234
答案 1 :(得分:0)
您可以将整数转换为字符串。从一开始到n的子字符串和从n + 1到字符串结尾的子字符串。将它们与第一个右块和第二个左块连接在一起。然后将字符串转换回整数。
答案 2 :(得分:0)
对于一个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;