#include<iostream>
#include<string>
using namespace std;
//求最大公倍数gcd算法
int gcd(int a,int b)
{
int c;
while(b>0)
{
c=a%b;
a=b;
b=c;
}
return a;
}
//旋转算法
void my_rotate(string &str,int m)
{
int len=str.length();
int num=gcd(len,m);
int elem=len/num;
int i,j;
for(j=0;j<num;j++)
{
char tmp=str[j];
for(i=0;i<elem-1;i++)
str[(j+i*m)%len]=str[(j+(i+1)*m)%len];
str[(j+i*m)%len]=tmp;
}
}
int main()
{
string s="abcdefghijk";
my_rotate(s,3);
cout<<ch<<endl;
return 0;
}
看了很久总算看明白这个算法了,主要用到的是gcd(欧几里得算法)、循环移位算法,比较难理解。