重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
#include stdio.h
创新互联是一家网站设计公司,集创意、互联网应用、软件技术为一体的创意网站建设服务商,主营产品:成都响应式网站建设公司、高端网站设计、营销型网站建设。我们专注企业品牌在网站中的整体树立,网络互动的体验,以及在手机等移动端的优质呈现。网站制作、成都网站设计、移动互联产品、网络运营、VI设计、云产品.运维为核心业务。为用户提供一站式解决方案,我们深知市场的竞争激烈,认真对待每位客户,为客户提供赏析悦目的作品,网站的价值服务。
void fun(int value,int n,int dire)
{
if(dire==0) return;
int x=1(sizeof(int)*8-1);
int temp;
int i;
if(dire0)
{
for(i=0;in;i++)
{
temp=value1;
value=1;
if(temp) value|=x;
}
}
else
{
for(i=0;in;i++)
{
temp=value x;
value=1;
if(temp) value|=1;
}
}
}
void main()
{
int x=0x55555555;
fun(x,1,1);
printf("%x",x);
}
函数功能:将输入字符串 src循环右移n位 result为输出结果
要求:以效率最高的方式实现
示例:
“abcde” --2-- "deabc"
"abcde"--8--"cdeab"
void right_shift_r(const char* src,char* result,unsigned int n)
{
unsigned int len = strlen(src);
int i=0;
for(i=0;ilen;i++)
{
result[i] = src[i+n]%len;
}
}
默认只有算术右移。 要循环右移需要把最低位保存下来, 然后赋值到最左。
unsigned int func(unsigned int n)
{
unsigned int v=n1;
n=1;
if(v) n|=1(sizeof(unsigned int)-1);
return n;
}
代码文本:
#include "stdio.h"
int myfun(int m,int n){//十进制循环右移
int tmp,i;
for(tmp=m,i=0;tmp;i++,tmp/=10);
if((n%=i)0) n+=i;
for(tmp=i-n,i=1;tmp;i*=10,tmp--);
for(tmp=n,n=1;tmp;n*=10,tmp--);
return m%n*i+m/n;
}
int main(int argc,char *argv[]){
int n,m;
printf("Please enter n m(int 0n,m1000000000)...\n");
scanf("%d%d",n,m);
printf("你输入的数是: %d\n",n);
printf("右移%d位后是: %d\n",m,myfun(n,m));
return 0;
}